diff --git a/docs b/docs index 9060c28080..29a13c542c 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 9060c28080e96d5ea0faffc9d73c0dd0269e536f +Subproject commit 29a13c542cf2d597713fefaf0eab426027084d62 diff --git a/sphinx/templates/tutorials/legal/complying_with_licenses.pot b/sphinx/templates/about/complying_with_licenses.pot similarity index 69% rename from sphinx/templates/tutorials/legal/complying_with_licenses.pot rename to sphinx/templates/about/complying_with_licenses.pot index 59ab9988ad..f6dc81d10d 100644 --- a/sphinx/templates/tutorials/legal/complying_with_licenses.pot +++ b/sphinx/templates/about/complying_with_licenses.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,181 +16,181 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:4 +#: ../../docs/about/complying_with_licenses.rst:4 msgid "Complying with licenses" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:7 +#: ../../docs/about/complying_with_licenses.rst:7 msgid "What are licenses?" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:9 +#: ../../docs/about/complying_with_licenses.rst:9 msgid "Godot is created and distributed under the `MIT License `_. It doesn't have a sole owner either, as every contributor that submits code to the project does it under this same license and keeps ownership of the contribution." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:14 +#: ../../docs/about/complying_with_licenses.rst:14 msgid "The license is the legal requirement for you (or your company) to use and distribute the software (and derivative projects, including games made with it). Your game or project can have a different license, but it still needs to comply with the original one." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:20 +#: ../../docs/about/complying_with_licenses.rst:20 msgid "Requirements" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:22 +#: ../../docs/about/complying_with_licenses.rst:22 msgid "In the case of the MIT license, the only requirement is to include the license text somewhere in your game or derivative project." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:25 +#: ../../docs/about/complying_with_licenses.rst:25 msgid "This text reads as follows:" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:27 +#: ../../docs/about/complying_with_licenses.rst:27 msgid "This game uses Godot Engine, available under the following license:" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:29 +#: ../../docs/about/complying_with_licenses.rst:29 msgid "Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. Copyright (c) 2014-2021 Godot Engine contributors." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:32 -#: ../../docs/tutorials/legal/complying_with_licenses.rst:122 +#: ../../docs/about/complying_with_licenses.rst:32 +#: ../../docs/about/complying_with_licenses.rst:122 msgid "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:" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:34 -#: ../../docs/tutorials/legal/complying_with_licenses.rst:124 +#: ../../docs/about/complying_with_licenses.rst:34 +#: ../../docs/about/complying_with_licenses.rst:124 msgid "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:36 -#: ../../docs/tutorials/legal/complying_with_licenses.rst:126 +#: ../../docs/about/complying_with_licenses.rst:36 +#: ../../docs/about/complying_with_licenses.rst:126 msgid "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." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:40 +#: ../../docs/about/complying_with_licenses.rst:40 msgid "Your games do not need to be under the same license. You are free to release your Godot projects under any license and to create commercial games with the engine." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:45 +#: ../../docs/about/complying_with_licenses.rst:45 msgid "Inclusion" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:47 +#: ../../docs/about/complying_with_licenses.rst:47 msgid "The license does not specify how it has to be included, so anything is valid as long as it can be displayed under some condition. These are the most common approaches (only need to implement one of them, not all)." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:52 +#: ../../docs/about/complying_with_licenses.rst:52 msgid "Credits screen" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:54 +#: ../../docs/about/complying_with_licenses.rst:54 msgid "Include the above license text somewhere in the credits screen. It can be at the bottom after showing the rest of the credits. Most large studios use this approach with open source licenses." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:59 +#: ../../docs/about/complying_with_licenses.rst:59 msgid "Licenses screen" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:61 +#: ../../docs/about/complying_with_licenses.rst:61 msgid "Some games have a special menu (often in the settings) to display licenses." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:64 +#: ../../docs/about/complying_with_licenses.rst:64 msgid "Output log" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:66 +#: ../../docs/about/complying_with_licenses.rst:66 msgid "Just printing the licensing text using the :ref:`print() ` function may be enough on platforms where a global output log is readable. This is the case on desktop platforms, Android and HTML5 (but not iOS and UWP)." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:71 +#: ../../docs/about/complying_with_licenses.rst:71 msgid "Accompanying file" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:73 +#: ../../docs/about/complying_with_licenses.rst:73 msgid "If the game is distributed on desktop platforms, a file containing the license can be added to the software that is installed to the user PC." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:77 +#: ../../docs/about/complying_with_licenses.rst:77 msgid "Printed manual" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:79 +#: ../../docs/about/complying_with_licenses.rst:79 msgid "If the game includes printed manuals, license text can be included there." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:82 +#: ../../docs/about/complying_with_licenses.rst:82 msgid "Link to the license" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:84 +#: ../../docs/about/complying_with_licenses.rst:84 msgid "The Godot Engine developers consider that a link to godotengine.org/license in your game documentation or credits would be an acceptable way to satisfy the license terms." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:89 +#: ../../docs/about/complying_with_licenses.rst:89 msgid "Third-party licenses" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:91 +#: ../../docs/about/complying_with_licenses.rst:91 msgid "Godot itself contains software written by `third parties `_. Most of it does not require license inclusion, but some do. Make sure to do it if these are compiled in your Godot export template. If you're using the official export templates, all libraries are enabled. This means you need to provide attribution for all the libraries listed below." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:98 +#: ../../docs/about/complying_with_licenses.rst:98 msgid "Here's a list of libraries requiring attribution:" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:101 +#: ../../docs/about/complying_with_licenses.rst:101 msgid "FreeType" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:103 +#: ../../docs/about/complying_with_licenses.rst:103 msgid "Godot uses `FreeType `_ to render fonts. Its license requires attribution, so the following text must be included together with the Godot license:" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:107 +#: ../../docs/about/complying_with_licenses.rst:107 msgid "Portions of this software are copyright © The FreeType Project (www.freetype.org). All rights reserved." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:109 +#: ../../docs/about/complying_with_licenses.rst:109 msgid "Note that should correspond to the value from the FreeType version used in your build. This information can be found in the editor by opening the **Help > About** dialog and going to the **Third-party Licenses** tab." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:114 +#: ../../docs/about/complying_with_licenses.rst:114 msgid "ENet" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:116 +#: ../../docs/about/complying_with_licenses.rst:116 msgid "Godot includes the `ENet `_ library to handle high-level multiplayer. ENet has similar licensing terms as Godot:" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:120 +#: ../../docs/about/complying_with_licenses.rst:120 msgid "Copyright (c) 2002-2020 Lee Salzman" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:129 +#: ../../docs/about/complying_with_licenses.rst:129 msgid "MBedTLS" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:131 +#: ../../docs/about/complying_with_licenses.rst:131 msgid "If the project is done with Godot 3.1 or above and it utilizes SSL (usually through HTTP requests), the `MBedTLS `_ Apache license needs to be complied by including the following text:" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:135 +#: ../../docs/about/complying_with_licenses.rst:135 msgid "Copyright The Mbed TLS Contributors" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:137 +#: ../../docs/about/complying_with_licenses.rst:137 msgid "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" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:141 +#: ../../docs/about/complying_with_licenses.rst:141 msgid "http://www.apache.org/licenses/LICENSE-2.0" msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:143 +#: ../../docs/about/complying_with_licenses.rst:143 msgid "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." msgstr "" -#: ../../docs/tutorials/legal/complying_with_licenses.rst:149 +#: ../../docs/about/complying_with_licenses.rst:149 msgid "Keep in mind that Godot 2.x and 3.0 use `OpenSSL `_ instead." msgstr "" diff --git a/sphinx/templates/about/docs_changelog.pot b/sphinx/templates/about/docs_changelog.pot index 0c7bf94921..dcbfe6b2f1 100644 --- a/sphinx/templates/about/docs_changelog.pot +++ b/sphinx/templates/about/docs_changelog.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -100,7 +100,8 @@ msgid "Your First Shader Series:" msgstr "" #: ../../docs/about/docs_changelog.rst:53 -msgid ":ref:`doc_what_are_shaders`" +#: ../../docs/about/docs_changelog.rst:177 +msgid ":ref:`doc_introduction_to_shaders`" msgstr "" #: ../../docs/about/docs_changelog.rst:54 @@ -140,7 +141,7 @@ msgid ":ref:`doc_vr_starter_tutorial_part_two`" msgstr "" #: ../../docs/about/docs_changelog.rst:71 -#: ../../docs/about/docs_changelog.rst:185 +#: ../../docs/about/docs_changelog.rst:184 msgid "Plugins" msgstr "" @@ -157,7 +158,7 @@ msgid ":ref:`doc_visual_shader_plugins`" msgstr "" #: ../../docs/about/docs_changelog.rst:78 -#: ../../docs/about/docs_changelog.rst:196 +#: ../../docs/about/docs_changelog.rst:195 msgid "Multi-threading" msgstr "" @@ -166,7 +167,7 @@ msgid ":ref:`doc_using_multiple_threads`" msgstr "" #: ../../docs/about/docs_changelog.rst:83 -#: ../../docs/about/docs_changelog.rst:201 +#: ../../docs/about/docs_changelog.rst:200 msgid "Creating content" msgstr "" @@ -227,7 +228,7 @@ msgid ":ref:`doc_signals`" msgstr "" #: ../../docs/about/docs_changelog.rst:110 -msgid ":ref:`doc_exporting`" +msgid ":ref:`doc_exporting_basics`" msgstr "" #: ../../docs/about/docs_changelog.rst:113 @@ -351,101 +352,93 @@ msgid ":ref:`doc_custom_postprocessing`" msgstr "" #: ../../docs/about/docs_changelog.rst:172 -msgid ":ref:`doc_intro_to_shaders_water_workshop`" +msgid ":ref:`doc_converting_glsl_to_godot_shaders`" msgstr "" #: ../../docs/about/docs_changelog.rst:173 -msgid ":ref:`doc_migrating_to_godot_shader_language`" -msgstr "" - -#: ../../docs/about/docs_changelog.rst:174 msgid ":ref:`doc_advanced_postprocessing`" msgstr "" -#: ../../docs/about/docs_changelog.rst:176 +#: ../../docs/about/docs_changelog.rst:175 msgid "Shading Reference:" msgstr "" #: ../../docs/about/docs_changelog.rst:178 -msgid ":ref:`doc_shaders`" -msgstr "" - -#: ../../docs/about/docs_changelog.rst:179 msgid ":ref:`doc_shading_language`" msgstr "" -#: ../../docs/about/docs_changelog.rst:180 +#: ../../docs/about/docs_changelog.rst:179 msgid ":ref:`doc_spatial_shader`" msgstr "" -#: ../../docs/about/docs_changelog.rst:181 +#: ../../docs/about/docs_changelog.rst:180 msgid ":ref:`doc_canvas_item_shader`" msgstr "" -#: ../../docs/about/docs_changelog.rst:182 +#: ../../docs/about/docs_changelog.rst:181 msgid ":ref:`doc_particle_shader`" msgstr "" -#: ../../docs/about/docs_changelog.rst:187 +#: ../../docs/about/docs_changelog.rst:186 msgid ":ref:`doc_making_main_screen_plugins`" msgstr "" -#: ../../docs/about/docs_changelog.rst:188 +#: ../../docs/about/docs_changelog.rst:187 msgid ":ref:`doc_spatial_gizmo_plugins`" msgstr "" -#: ../../docs/about/docs_changelog.rst:191 +#: ../../docs/about/docs_changelog.rst:190 msgid "Platform-specific" msgstr "" -#: ../../docs/about/docs_changelog.rst:193 +#: ../../docs/about/docs_changelog.rst:192 msgid ":ref:`doc_customizing_html5_shell`" msgstr "" -#: ../../docs/about/docs_changelog.rst:198 +#: ../../docs/about/docs_changelog.rst:197 msgid ":ref:`doc_thread_safe_apis`" msgstr "" -#: ../../docs/about/docs_changelog.rst:203 +#: ../../docs/about/docs_changelog.rst:202 msgid ":ref:`doc_making_trees`" msgstr "" -#: ../../docs/about/docs_changelog.rst:206 +#: ../../docs/about/docs_changelog.rst:205 msgid "Miscellaneous" msgstr "" -#: ../../docs/about/docs_changelog.rst:208 +#: ../../docs/about/docs_changelog.rst:207 msgid ":ref:`doc_jitter_stutter`" msgstr "" -#: ../../docs/about/docs_changelog.rst:209 +#: ../../docs/about/docs_changelog.rst:208 msgid ":ref:`doc_running_code_in_the_editor`" msgstr "" -#: ../../docs/about/docs_changelog.rst:210 +#: ../../docs/about/docs_changelog.rst:209 msgid ":ref:`doc_change_scenes_manually`" msgstr "" -#: ../../docs/about/docs_changelog.rst:211 +#: ../../docs/about/docs_changelog.rst:210 msgid ":ref:`doc_gles2_gles3_differences`" msgstr "" -#: ../../docs/about/docs_changelog.rst:214 +#: ../../docs/about/docs_changelog.rst:213 msgid "Compiling" msgstr "" -#: ../../docs/about/docs_changelog.rst:216 +#: ../../docs/about/docs_changelog.rst:215 msgid ":ref:`doc_optimizing_for_size`" msgstr "" -#: ../../docs/about/docs_changelog.rst:217 +#: ../../docs/about/docs_changelog.rst:216 msgid ":ref:`doc_compiling_with_script_encryption_key`" msgstr "" -#: ../../docs/about/docs_changelog.rst:220 +#: ../../docs/about/docs_changelog.rst:219 msgid "Engine development" msgstr "" -#: ../../docs/about/docs_changelog.rst:222 +#: ../../docs/about/docs_changelog.rst:221 msgid ":ref:`doc_binding_to_external_libraries`" msgstr "" diff --git a/sphinx/templates/about/faq.pot b/sphinx/templates/about/faq.pot index 4e04f25d30..1650b9ac2e 100644 --- a/sphinx/templates/about/faq.pot +++ b/sphinx/templates/about/faq.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -458,86 +458,86 @@ msgstr "" msgid "This custom UI toolkit :ref:`can't be used as a library `, but you can still :ref:`use Godot to create non-game applications by using the editor `." msgstr "" -#: ../../docs/about/faq.rst:413 +#: ../../docs/about/faq.rst:415 msgid "Why does Godot not use STL (Standard Template Library)?" msgstr "" -#: ../../docs/about/faq.rst:415 +#: ../../docs/about/faq.rst:417 msgid "Like many other libraries (Qt as an example), Godot does not make use of STL. We believe STL is a great general purpose library, but we had special requirements for Godot." msgstr "" -#: ../../docs/about/faq.rst:419 +#: ../../docs/about/faq.rst:421 msgid "STL templates create very large symbols, which results in huge debug binaries. We use few templates with very short names instead." msgstr "" -#: ../../docs/about/faq.rst:420 +#: ../../docs/about/faq.rst:422 msgid "Most of our containers cater to special needs, like Vector, which uses copy on write and we use to pass data around, or the RID system, which requires O(1) access time for performance. Likewise, our hash map implementations are designed to integrate seamlessly with internal engine types." msgstr "" -#: ../../docs/about/faq.rst:421 +#: ../../docs/about/faq.rst:423 msgid "Our containers have memory tracking built-in, which helps better track memory usage." msgstr "" -#: ../../docs/about/faq.rst:422 +#: ../../docs/about/faq.rst:424 msgid "For large arrays, we use pooled memory, which can be mapped to either a preallocated buffer or virtual memory." msgstr "" -#: ../../docs/about/faq.rst:423 +#: ../../docs/about/faq.rst:425 msgid "We use our custom String type, as the one provided by STL is too basic and lacks proper internationalization support." msgstr "" -#: ../../docs/about/faq.rst:426 +#: ../../docs/about/faq.rst:428 msgid "Why does Godot not use exceptions?" msgstr "" -#: ../../docs/about/faq.rst:428 +#: ../../docs/about/faq.rst:430 msgid "We believe games should not crash, no matter what. If an unexpected situation happens, Godot will print an error (which can be traced even to script), but then it will try to recover as gracefully as possible and keep going." msgstr "" -#: ../../docs/about/faq.rst:433 +#: ../../docs/about/faq.rst:435 msgid "Additionally, exceptions significantly increase binary size for the executable." msgstr "" -#: ../../docs/about/faq.rst:437 +#: ../../docs/about/faq.rst:439 msgid "Why does Godot not enforce RTTI?" msgstr "" -#: ../../docs/about/faq.rst:439 +#: ../../docs/about/faq.rst:441 msgid "Godot provides its own type-casting system, which can optionally use RTTI internally. Disabling RTTI in Godot means considerably smaller binary sizes can be achieved, at a little performance cost." msgstr "" -#: ../../docs/about/faq.rst:444 +#: ../../docs/about/faq.rst:446 msgid "Why does Godot not force users to implement DoD (Data oriented Design)?" msgstr "" -#: ../../docs/about/faq.rst:446 +#: ../../docs/about/faq.rst:448 msgid "While Godot internally for a lot of the heavy performance tasks attempts to use cache coherency as well as possible, we believe most users don't really need to be forced to use DoD practices." msgstr "" -#: ../../docs/about/faq.rst:450 +#: ../../docs/about/faq.rst:452 msgid "DoD is mostly a cache coherency optimization that can only gain you significant performance improvements when dealing with dozens of thousands of objects (which are processed every frame with little modification). As in, if you are moving a few hundred sprites or enemies per frame, DoD won't help you, and you should consider a different approach to optimization." msgstr "" -#: ../../docs/about/faq.rst:457 +#: ../../docs/about/faq.rst:459 msgid "The vast majority of games do not need this and Godot provides handy helpers to do the job for most cases when you do." msgstr "" -#: ../../docs/about/faq.rst:460 +#: ../../docs/about/faq.rst:462 msgid "If a game that really needs to process such large amount of objects is needed, our recommendation is to use C++ and GDNative for the high performance parts and GDScript (or C#) for the rest of the game." msgstr "" -#: ../../docs/about/faq.rst:465 +#: ../../docs/about/faq.rst:467 msgid "How can I support Godot development or contribute?" msgstr "" -#: ../../docs/about/faq.rst:467 +#: ../../docs/about/faq.rst:469 msgid "See :ref:`doc_ways_to_contribute`." msgstr "" -#: ../../docs/about/faq.rst:470 +#: ../../docs/about/faq.rst:472 msgid "Who is working on Godot? How can I contact you?" msgstr "" -#: ../../docs/about/faq.rst:472 +#: ../../docs/about/faq.rst:474 msgid "See the corresponding page on the `Godot website `_." msgstr "" diff --git a/sphinx/templates/about/index.pot b/sphinx/templates/about/index.pot index 00b4c44c7e..73a28610cd 100644 --- a/sphinx/templates/about/index.pot +++ b/sphinx/templates/about/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/about/introduction.pot b/sphinx/templates/about/introduction.pot index 124609b01a..560044567c 100644 --- a/sphinx/templates/about/introduction.pot +++ b/sphinx/templates/about/introduction.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/about/list_of_features.pot b/sphinx/templates/about/list_of_features.pot index 657ae1b30c..819e48df9e 100644 --- a/sphinx/templates/about/list_of_features.pot +++ b/sphinx/templates/about/list_of_features.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/about/release_policy.pot b/sphinx/templates/about/release_policy.pot index 4956c477c0..a106e6988f 100644 --- a/sphinx/templates/about/release_policy.pot +++ b/sphinx/templates/about/release_policy.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/about/troubleshooting.pot b/sphinx/templates/about/troubleshooting.pot index ebeb7e4348..b3cb9f6c8c 100644 --- a/sphinx/templates/about/troubleshooting.pot +++ b/sphinx/templates/about/troubleshooting.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/assetlib/index.pot b/sphinx/templates/community/asset_library/index.pot similarity index 86% rename from sphinx/templates/tutorials/assetlib/index.pot rename to sphinx/templates/community/asset_library/index.pot index ca70cbb596..7bb4d06905 100644 --- a/sphinx/templates/tutorials/assetlib/index.pot +++ b/sphinx/templates/community/asset_library/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/assetlib/index.rst:2 +#: ../../docs/community/asset_library/index.rst:2 msgid "Asset Library" msgstr "" diff --git a/sphinx/templates/community/asset_library/submitting_to_assetlib.pot b/sphinx/templates/community/asset_library/submitting_to_assetlib.pot new file mode 100644 index 0000000000..25b27fb860 --- /dev/null +++ b/sphinx/templates/community/asset_library/submitting_to_assetlib.pot @@ -0,0 +1,261 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:4 +msgid "Submitting to the Asset Library" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:7 +msgid "Introduction" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:9 +msgid "This tutorial aims to serve as a guide on how you can submit your own assets to the Godot Asset Library and share them with the Godot community." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:12 +msgid "As mentioned in the :ref:`doc_using_assetlib` document, in order to be able to submit assets to the AssetLib, you need to have a registered account, and be logged in." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:17 +msgid "Submission guidelines" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:19 +msgid "Before submitting your asset, please ensure it follows all of the requirements, and also consider following the recommendations." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:23 +msgid "Requirements" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:25 +msgid "Generally speaking, most assets people submit to the asset library are accepted. However, in order for your asset to be accepted, there are a few requirements your asset needs to meet to be approved." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:29 +msgid "The asset must **work**. If the asset doesn't run or otherwise doesn't work in the specified Godot version, then it will be rejected." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:32 +msgid "The asset must have a proper **.gitignore** file. It's important to keep redundant data out of the repository. `Here's a template. `_" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:36 +msgid "No **submodules**, or any submodules must be non-essential. GitHub does not include submodules in the downloaded ZIP file, so if the asset needs the contents of the submodule, your asset won't work." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:40 +msgid "The **license** needs to be correct. The license listed on the asset library must match the license in the repository. The repo MUST have a license file, called either \"LICENSE\" or \"LICENSE.md\". This file must contain the license text itself and a copyright statement that includes the year(s) and copyright holder." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:46 +msgid "Use proper **English** for the name and description of your asset. This includes using correct capitalization, and using full sentences in the description. You can also include other languages, but there should at least be an English version." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:51 +msgid "The icon link must be a **direct link**. For icons hosted on GitHub, the link must start with \"raw.githubusercontent.com\", not \"github.com\"." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:55 +msgid "Recommendations" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:57 +msgid "These things are not required for your asset to be approved, but if you follow these recommendations, you can help make the asset library a better place for all users." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:61 +msgid "Fix or suppress all script **warnings**. The warning system is there to help identify issues with your code, but people using your asset don't need to see them." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:65 +msgid "Make your code conform to the official **style guides**. Having a consistent style helps other people read your code, and it also helps if other people wish to contribute to your asset. See: the :ref:`doc_gdscript_styleguide` or the :ref:`doc_c_sharp_styleguide`." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:70 +msgid "If you have screenshots in your repo, place them in their own subfolder and add an empty **.gdignore** file in the same folder (note: **gd**, not **git**). This prevents Godot from importing your screenshots. On Windows, open a command prompt in the project folder and run ``type nul > .gdignore`` to create a file whose name starts with a period." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:76 +msgid "If your asset is a library for working with other files, consider including **example files** in the asset." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:79 +msgid "Consider adding a **.gitattributes** file to your repo. This file allows giving extra instructions to Git, such as specifying line endings and listing files not required for your asset to function with the ``export-ignore`` directive. This directive removes such files from the resulting ZIP file and prevents them from being downloaded by the asset library users. For a typical plugin **.gitattributes** may look like this:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:101 +msgid "Other types of assets may require a different configuration (e.g. a project template requires **project.godot**)." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:104 +msgid "If you are submitting a plugin, add a **copy** of your license and readme to the plugin folder itself. This is the folder that users are guaranteed to keep with their project, so a copy ensures they always have those files handy (and helps them fulfill your licensing terms)." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:109 +msgid "The **icon** should be a square, its aspect ratio should be 1:1. It should also ideally have a minimum resolution of 64x64 pixels." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:112 +msgid "While the asset library allows more than just GitHub, consider hosting your asset's source code on **GitHub**. Other services may not work reliably, and a lack of familiarity can be a barrier to contributors." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:117 +msgid "Submitting" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:119 +msgid "Once you are logged in, you will be able to head over to the \"Submit Assets\" page of the AssetLib, which will look like this:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:122 +msgid "|image0|" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:124 +msgid "While it may look like a lot (and there is more as you scroll down), each field is described in terms of what you should put in. We will nonetheless go over what is required in the submission form here as well." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:129 +msgid "**Asset Name**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:129 +msgid "The name of your asset. Should be a unique, descriptive title of what your asset is." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:135 +msgid "**Category**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:132 +msgid "The category that your asset belongs to, and will be shown in search results. The category is split into **Addons** and **Projects**. In-editor, assets of the Project type (Templates, Demos, Projects) only show up when viewing the AssetLib from the Project Manager, while assets of the Addon type will only be visible from inside a project." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:141 +msgid "**Godot version**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:138 +msgid "The version of the engine that the asset works with. Currently, it's not possible to have a single asset entry contain downloads for multiple engine versions, so you may need to re-submit the asset multiple times, with an entry for each Godot version it supports. This is particularly important when dealing with major versions of the engine, such as Godot 2.x and Godot 3.x." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:148 +msgid "**Version**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:144 +msgid "The version number of the asset. While you are free to choose and use any versioning scheme that you like, you may want to look into something such as `SemVer `_ if you want your asset's versioning scheme to be clear and consistent. Note that there is also an internal version number, incremented every time the asset download URL is changed or updated." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:153 +msgid "**Repository host**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:151 +msgid "Assets uploaded to the AssetLib are not hosted on it directly. Instead, they point to repositories hosted on third-party Git providers, such as GitHub, GitLab or Bitbucket. This is where you choose which provider your asset uses, so the site can compute the final download link." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:156 +msgid "**Repository URL**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:156 +msgid "The URL to your asset's files/webpage. This will vary based on your choice of provider, but it should look similar to `https://github.com//`." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:161 +msgid "**Issues URL**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:159 +msgid "The URL to your asset's issue tracker. Again, this will differ from repository host to repository host, but will likely look similar to `https://github.com///issues`. You may leave this field empty if you use your provider's issue tracker, and it's part of the same repository." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:165 +msgid "**Download Commit**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:164 +msgid "The commit of the asset. For example, `b1d3172f89b86e52465a74f63a74ac84c491d3e1`. The site computes the actual download URL from this." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:169 +msgid "**Icon URL**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:168 +msgid "The URL to your asset's icon (which will be used as a thumbnail in the AssetLib search results and on the asset's page). Should be an image in either the PNG or JPG format." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:174 +msgid "**License**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:172 +msgid "The license under which you are distributing the asset. The list includes a variety of free and open-source software licenses, such as GPL (v2 and v3), MIT, BSD and Boost Software License. You can visit `OpenSource.org `_ for a detailed description of each of the listed licenses." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:180 +msgid "**Description**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:177 +msgid "Finally, you can use the Description field for a textual overview of your asset, its features and behavior, a changelog, et cetera. In the future, formatting with Markdown will be supported, but currently, your only option is plain text." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:182 +msgid "You may also include up to three video and/or image previews, which will be shown at the bottom of the asset page. Use the \"Enable\" checkbox on each of the preview submission boxes to enable them." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:186 +msgid "**Type**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:187 +msgid "Either an image, or a video." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:188 +msgid "**Image/YouTube URL**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:189 +msgid "Either a link to the image, or to a video, hosted on YouTube." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:193 +msgid "**Thumbnail URL**:" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:191 +msgid "A URL to an image that will be used as a thumbnail for the preview. This option will be removed eventually, and thumbnails will be automatically computed instead." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:195 +msgid "Once you are done, press \"Submit\". Your asset will be entered into the review queue. You can check all assets currently pending a review `here `_ . The approval process is manual and may take up to a few days for your asset to be accepted (or rejected), so please be patient!" +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:202 +msgid "You may have some luck accelerating the approval process by messaging the moderators and AssetLib reviewers on the `Contributors Chat `_, or the official Discord server." +msgstr "" + +#: ../../docs/community/asset_library/submitting_to_assetlib.rst:206 +msgid "You will be informed when your asset is reviewed. If it was rejected, you will be told why that may have been, and you will be able to submit it again with the appropriate changes." +msgstr "" diff --git a/sphinx/templates/tutorials/assetlib/uploading_to_assetlib.pot b/sphinx/templates/community/asset_library/uploading_to_assetlib.pot similarity index 72% rename from sphinx/templates/tutorials/assetlib/uploading_to_assetlib.pot rename to sphinx/templates/community/asset_library/uploading_to_assetlib.pot index 28c3632b73..ba77ea6f63 100644 --- a/sphinx/templates/tutorials/assetlib/uploading_to_assetlib.pot +++ b/sphinx/templates/community/asset_library/uploading_to_assetlib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,238 +16,238 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:4 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:4 msgid "Submitting to the Asset Library" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:7 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:7 msgid "Introduction" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:9 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:9 msgid "This tutorial aims to serve as a guide on how you can submit your own assets to the Godot Asset Library and share them with the Godot community." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:12 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:12 msgid "As mentioned in the :ref:`doc_using_assetlib` document, in order to be able to submit assets to the AssetLib, you need to have a registered account, and be logged in." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:17 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:17 msgid "Submission guidelines" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:19 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:19 msgid "Before submitting your asset, please ensure it follows all of the requirements, and also consider following the recommendations." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:23 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:23 msgid "Requirements" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:25 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:25 msgid "Generally speaking, most assets people submit to the asset library are accepted. However, in order for your asset to be accepted, there are a few requirements your asset needs to meet to be approved." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:29 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:29 msgid "The asset must **work**. If the asset doesn't run or otherwise doesn't work in the specified Godot version, then it will be rejected." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:32 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:32 msgid "The asset must have a proper **.gitignore** file. It's important to keep redundant data out of the repository. `Here's a template. `_" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:36 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:36 msgid "No **submodules**, or any submodules must be non-essential. GitHub does not include submodules in the downloaded ZIP file, so if the asset needs the contents of the submodule, your asset won't work." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:40 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:40 msgid "The **license** needs to be correct. The license listed on the asset library must match the license in the repository. The repo MUST have a license file, called either \"LICENSE\" or \"LICENSE.md\". This file must contain the license text itself and a copyright statement that includes the year(s) and copyright holder." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:46 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:46 msgid "Use proper **English** for the name and description of your asset. This includes using correct capitalization, and using full sentences in the description. You can also include other languages, but there should at least be an English version." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:51 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:51 msgid "The icon link must be a **direct link**. For icons hosted on GitHub, the link must start with \"raw.githubusercontent.com\", not \"github.com\"." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:55 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:55 msgid "Recommendations" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:57 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:57 msgid "These things are not required for your asset to be approved, but if you follow these recommendations, you can help make the asset library a better place for all users." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:61 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:61 msgid "Fix or suppress all script **warnings**. The warning system is there to help identify issues with your code, but people using your asset don't need to see them." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:65 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:65 msgid "Make your code conform to the official **style guides**. Having a consistent style helps other people read your code, and it also helps if other people wish to contribute to your asset. See: the :ref:`doc_gdscript_styleguide` or the :ref:`doc_c_sharp_styleguide`." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:70 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:70 msgid "If you have screenshots in your repo, place them in their own subfolder and add an empty **.gdignore** file in the same folder (note: **gd**, not **git**). This prevents Godot from importing your screenshots. On Windows, open a command prompt in the project folder and run ``type nul > .gdignore`` to create a file whose name starts with a period." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:76 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:76 msgid "If your asset is a library for working with other files, consider including **example files** in the asset." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:79 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:79 msgid "Consider adding a **.gitattributes** file to your repo. This file allows giving extra instructions to Git, such as specifying line endings and listing files not required for your asset to function with the ``export-ignore`` directive. This directive removes such files from the resulting ZIP file and prevents them from being downloaded by the asset library users. For a typical plugin **.gitattributes** may look like this:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:101 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:101 msgid "Other types of assets may require a different configuration (e.g. a project template requires **project.godot**)." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:104 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:104 msgid "If you are submitting a plugin, add a **copy** of your license and readme to the plugin folder itself. This is the folder that users are guaranteed to keep with their project, so a copy ensures they always have those files handy (and helps them fulfill your licensing terms)." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:109 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:109 msgid "The **icon** should be a square, its aspect ratio should be 1:1. It should also ideally have a minimum resolution of 64x64 pixels." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:112 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:112 msgid "While the asset library allows more than just GitHub, consider hosting your asset's source code on **GitHub**. Other services may not work reliably, and a lack of familiarity can be a barrier to contributors." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:117 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:117 msgid "Submitting" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:119 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:119 msgid "Once you are logged in, you will be able to head over to the \"Submit Assets\" page of the AssetLib, which will look like this:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:122 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:122 msgid "|image0|" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:124 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:124 msgid "While it may look like a lot (and there is more as you scroll down), each field is described in terms of what you should put in. We will nonetheless go over what is required in the submission form here as well." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:129 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:129 msgid "**Asset Name**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:129 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:129 msgid "The name of your asset. Should be a unique, descriptive title of what your asset is." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:135 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:135 msgid "**Category**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:132 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:132 msgid "The category that your asset belongs to, and will be shown in search results. The category is split into **Addons** and **Projects**. In-editor, assets of the Project type (Templates, Demos, Projects) only show up when viewing the AssetLib from the Project Manager, while assets of the Addon type will only be visible from inside a project." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:141 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:141 msgid "**Godot version**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:138 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:138 msgid "The version of the engine that the asset works with. Currently, it's not possible to have a single asset entry contain downloads for multiple engine versions, so you may need to re-submit the asset multiple times, with an entry for each Godot version it supports. This is particularly important when dealing with major versions of the engine, such as Godot 2.x and Godot 3.x." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:148 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:148 msgid "**Version**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:144 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:144 msgid "The version number of the asset. While you are free to choose and use any versioning scheme that you like, you may want to look into something such as `SemVer `_ if you want your asset's versioning scheme to be clear and consistent. Note that there is also an internal version number, incremented every time the asset download URL is changed or updated." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:153 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:153 msgid "**Repository host**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:151 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:151 msgid "Assets uploaded to the AssetLib are not hosted on it directly. Instead, they point to repositories hosted on third-party Git providers, such as GitHub, GitLab or Bitbucket. This is where you choose which provider your asset uses, so the site can compute the final download link." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:156 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:156 msgid "**Repository URL**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:156 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:156 msgid "The URL to your asset's files/webpage. This will vary based on your choice of provider, but it should look similar to `https://github.com//`." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:161 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:161 msgid "**Issues URL**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:159 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:159 msgid "The URL to your asset's issue tracker. Again, this will differ from repository host to repository host, but will likely look similar to `https://github.com///issues`. You may leave this field empty if you use your provider's issue tracker, and it's part of the same repository." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:165 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:165 msgid "**Download Commit**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:164 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:164 msgid "The commit of the asset. For example, `b1d3172f89b86e52465a74f63a74ac84c491d3e1`. The site computes the actual download URL from this." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:169 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:169 msgid "**Icon URL**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:168 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:168 msgid "The URL to your asset's icon (which will be used as a thumbnail in the AssetLib search results and on the asset's page). Should be an image in either the PNG or JPG format." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:174 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:174 msgid "**License**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:172 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:172 msgid "The license under which you are distributing the asset. The list includes a variety of free and open-source software licenses, such as GPL (v2 and v3), MIT, BSD and Boost Software License. You can visit `OpenSource.org `_ for a detailed description of each of the listed licenses." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:180 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:180 msgid "**Description**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:177 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:177 msgid "Finally, you can use the Description field for a textual overview of your asset, its features and behavior, a changelog, et cetera. In the future, formatting with Markdown will be supported, but currently, your only option is plain text." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:182 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:182 msgid "You may also include up to three video and/or image previews, which will be shown at the bottom of the asset page. Use the \"Enable\" checkbox on each of the preview submission boxes to enable them." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:186 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:186 msgid "**Type**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:187 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:187 msgid "Either an image, or a video." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:188 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:188 msgid "**Image/YouTube URL**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:189 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:189 msgid "Either a link to the image, or to a video, hosted on YouTube." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:193 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:193 msgid "**Thumbnail URL**:" msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:191 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:191 msgid "A URL to an image that will be used as a thumbnail for the preview. This option will be removed eventually, and thumbnails will be automatically computed instead." msgstr "" -#: ../../docs/tutorials/assetlib/uploading_to_assetlib.rst:195 +#: ../../docs/community/asset_library/uploading_to_assetlib.rst:195 msgid "Once you are done, hit Submit. Your asset will be entered into the pending queue, which you can visit on the AssetLib `here `_ . The approval process is manual and may take up to a few days for your addon to be accepted (or rejected), so please be patient! You will be informed when your asset is reviewed. If it was rejected, you will be told why that may have been, and you will be able to submit it again with the appropriate changes. You may have some luck accelerating the approval process by messaging the moderators/assetlib reviewers on IRC (the ``#godotengine-atelier`` channel on Freenode), or the official Discord server." msgstr "" diff --git a/sphinx/templates/tutorials/assetlib/using_assetlib.pot b/sphinx/templates/community/asset_library/using_assetlib.pot similarity index 67% rename from sphinx/templates/tutorials/assetlib/using_assetlib.pot rename to sphinx/templates/community/asset_library/using_assetlib.pot index cc9d2297e2..87af30779a 100644 --- a/sphinx/templates/tutorials/assetlib/using_assetlib.pot +++ b/sphinx/templates/community/asset_library/using_assetlib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,262 +16,262 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:4 +#: ../../docs/community/asset_library/using_assetlib.rst:4 msgid "Using the Asset Library" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:7 +#: ../../docs/community/asset_library/using_assetlib.rst:7 msgid "On the website" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:10 +#: ../../docs/community/asset_library/using_assetlib.rst:10 msgid "Overview" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:12 +#: ../../docs/community/asset_library/using_assetlib.rst:12 msgid "As mentioned before, you can access the web frontend of the Asset Library on `Godot's official website `_. This is what it looks like when you first visit it:" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:16 +#: ../../docs/community/asset_library/using_assetlib.rst:16 msgid "|image0|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:18 +#: ../../docs/community/asset_library/using_assetlib.rst:18 msgid "At the top, you see the **header**, which takes you to various other parts of the AssetLib - at the moment, it's empty, as we are not logged in." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:22 +#: ../../docs/community/asset_library/using_assetlib.rst:22 msgid "Searching" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:24 +#: ../../docs/community/asset_library/using_assetlib.rst:24 msgid "In the center is the **search bar + settings** section, and the **assets** section below it - this lets you filter out certain kinds of assets based on a host of criteria. These include the asset **category** (such as 2D tools, scripts and demos), **engine version** they are intended for, **sorting order** (by update date, by name, etc.) and **support level**." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:30 +#: ../../docs/community/asset_library/using_assetlib.rst:30 msgid "While most other filter settings should be fairly self-explanatory, it's worth going over what \"support level\" means in the Asset Library. Currently there are three support levels, and each asset can belong to only one." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:34 +#: ../../docs/community/asset_library/using_assetlib.rst:34 msgid "**Official** assets are created and maintained by the official Godot Engine developers. Currently, these include the official engine demos, which showcase how various areas of the engine work." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:38 +#: ../../docs/community/asset_library/using_assetlib.rst:38 msgid "**Community** assets are submitted and maintained by the members of the Godot community." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:41 +#: ../../docs/community/asset_library/using_assetlib.rst:41 msgid "**Testing** assets are works-in-progress, and may contain bugs and usability issues. They are not recommended for use in serious projects, but you are encouraged to download, test them, and submit issues to the original authors." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:45 +#: ../../docs/community/asset_library/using_assetlib.rst:45 msgid "You can mix and match any of the search filters and criteria, and upon clicking the Search button, receive the list of all assets in the Library that match them." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:48 +#: ../../docs/community/asset_library/using_assetlib.rst:48 msgid "|image1|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:50 +#: ../../docs/community/asset_library/using_assetlib.rst:50 msgid "Note that the search results are not updated in real-time, so you will have to re-submit the search query each time you change the query settings." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:54 +#: ../../docs/community/asset_library/using_assetlib.rst:54 msgid "Breakdown of an asset" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:56 +#: ../../docs/community/asset_library/using_assetlib.rst:56 msgid "Now let's take a look at what an asset's page looks like and what it contains." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:58 +#: ../../docs/community/asset_library/using_assetlib.rst:58 msgid "|image2|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:60 +#: ../../docs/community/asset_library/using_assetlib.rst:60 msgid "Asset's thumbnail/icon." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:61 +#: ../../docs/community/asset_library/using_assetlib.rst:61 msgid "Asset's name." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:62 +#: ../../docs/community/asset_library/using_assetlib.rst:62 msgid "Current version number of the asset." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:63 +#: ../../docs/community/asset_library/using_assetlib.rst:63 msgid "Asset's category, Godot version, and support status." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:64 +#: ../../docs/community/asset_library/using_assetlib.rst:64 msgid "Asset's original author/submitter." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:65 +#: ../../docs/community/asset_library/using_assetlib.rst:65 msgid "The license the asset is distributed under." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:66 +#: ../../docs/community/asset_library/using_assetlib.rst:66 msgid "The date of the asset's latest edit/update." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:67 +#: ../../docs/community/asset_library/using_assetlib.rst:67 msgid "A textual description of the asset." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:68 +#: ../../docs/community/asset_library/using_assetlib.rst:68 msgid "Links related to the asset (download link, file list, issue tracker)." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:69 +#: ../../docs/community/asset_library/using_assetlib.rst:69 msgid "Images and videos showcasing the asset." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:72 +#: ../../docs/community/asset_library/using_assetlib.rst:72 msgid "Registering and logging in" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:74 +#: ../../docs/community/asset_library/using_assetlib.rst:74 msgid "In order to upload assets to the AssetLib, you need to be logged in, and to do that, you need a registered user account. In the future, this may also give you access to other features, such as commenting on or rating the existing assets. You do *not* need to be logged in to browse and download the assets." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:79 +#: ../../docs/community/asset_library/using_assetlib.rst:79 msgid "The login/registration page can be accessed from the AssetLib header." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:81 +#: ../../docs/community/asset_library/using_assetlib.rst:81 msgid "|image3|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:83 +#: ../../docs/community/asset_library/using_assetlib.rst:83 msgid "From here, you can register your account, which requires a valid email address, a username, and a (preferably strong) password." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:86 +#: ../../docs/community/asset_library/using_assetlib.rst:86 msgid "|image4|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:88 +#: ../../docs/community/asset_library/using_assetlib.rst:88 msgid "Then, you can use your username and password to log in." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:90 +#: ../../docs/community/asset_library/using_assetlib.rst:90 msgid "|image5|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:92 +#: ../../docs/community/asset_library/using_assetlib.rst:92 msgid "This will change the look of the AssetLib header. Now you get access to a handful of new functions:" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:95 +#: ../../docs/community/asset_library/using_assetlib.rst:95 msgid "The feed, which shows a list of status updates on your submitted assets (and possibly more in the future)." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:96 +#: ../../docs/community/asset_library/using_assetlib.rst:96 msgid "A list of your uploaded assets." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:97 +#: ../../docs/community/asset_library/using_assetlib.rst:97 msgid "The ability to submit new assets." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:99 +#: ../../docs/community/asset_library/using_assetlib.rst:99 msgid "|image6|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:101 -msgid "You can learn how to submit assets to the Library, and what the asset submission guidelines are, in the next part of this tutorial, :ref:`doc_uploading_to_assetlib`." +#: ../../docs/community/asset_library/using_assetlib.rst:101 +msgid "You can learn how to submit assets to the Library, and what the asset submission guidelines are, in the next part of this tutorial, :ref:`doc_submitting_to_assetlib`." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:105 +#: ../../docs/community/asset_library/using_assetlib.rst:105 msgid "In the editor" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:109 +#: ../../docs/community/asset_library/using_assetlib.rst:109 msgid "The editor will display different categories of assets depending on whether you're browsing the project manager's **Templates** tab or the editor's **AssetLib** tab." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:113 +#: ../../docs/community/asset_library/using_assetlib.rst:113 msgid "The project manager's **Templates** tab will only display assets that are standalone projects by themselves. This is denoted on the asset library with the *Templates*, *Demos* and *Projects* categories." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:117 +#: ../../docs/community/asset_library/using_assetlib.rst:117 msgid "The editor's **AssetLib** tab will only display assets that are *not* standalone projects by themselves. In other words, it will display assets from all categories except *Templates*, *Demos* and *Projects*." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:121 +#: ../../docs/community/asset_library/using_assetlib.rst:121 msgid "You can also access the AssetLib directly from Godot:" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:123 +#: ../../docs/community/asset_library/using_assetlib.rst:123 msgid "|image7|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:125 +#: ../../docs/community/asset_library/using_assetlib.rst:125 msgid "|image14|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:127 +#: ../../docs/community/asset_library/using_assetlib.rst:127 msgid "Click on it, and Godot will fetch info about the assets from the AssetLib. Once it's finished, you will see a window similar to what the AssetLib website looks like, with some differences:" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:131 +#: ../../docs/community/asset_library/using_assetlib.rst:131 msgid "|image8|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:133 +#: ../../docs/community/asset_library/using_assetlib.rst:133 msgid "Similarly to the web version of the AssetLib, here you can search for assets by category, name, and sort them by factors such as name or edit date." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:136 +#: ../../docs/community/asset_library/using_assetlib.rst:136 msgid "Notably, you can only fetch assets for the current version of Godot you are running. Projects, Demos and Templates can be downloaded from the Project Manager view of the AssetLib. Addons (tools, scripts, materials etc.) can be downloaded from the in-project AssetLib and added to the current project. In addition, unlike when using the web frontend, the search results are updated in real-time (you do not have to press Search after every change to your search query for the changes to take place)." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:144 +#: ../../docs/community/asset_library/using_assetlib.rst:144 msgid "In the future, you will be able to choose a different AssetLib provider to fetch assets from (using the Site dropdown menu), however currently only the official `Godot website `_ version of the AssetLib is supported, as well as the version that may be running on your local machine's web server (the localhost option)." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:150 +#: ../../docs/community/asset_library/using_assetlib.rst:150 msgid "When you click on an asset, you will see more information about it." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:152 +#: ../../docs/community/asset_library/using_assetlib.rst:152 msgid "|image9|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:154 +#: ../../docs/community/asset_library/using_assetlib.rst:154 msgid "If you click on the Install button, Godot will fetch an archive of the asset, and will track download progress of it at the bottom of the editor window. If the download fails, you can retry it using the Retry button." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:158 +#: ../../docs/community/asset_library/using_assetlib.rst:158 msgid "|image10|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:160 +#: ../../docs/community/asset_library/using_assetlib.rst:160 msgid "When it finishes, you can proceed to install it using the Install button. This will bring up the Package Installer window." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:163 +#: ../../docs/community/asset_library/using_assetlib.rst:163 msgid "|image11|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:165 +#: ../../docs/community/asset_library/using_assetlib.rst:165 msgid "Here you can see a list of all the files that will be installed. You can tick off any of the files that you do not wish to install, and Godot will also inform you about any problems with files that it cannot install. These files will be shown in red, and hovering over them will show you a message stating why it cannot be installed." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:171 +#: ../../docs/community/asset_library/using_assetlib.rst:171 msgid "|image12|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:173 +#: ../../docs/community/asset_library/using_assetlib.rst:173 msgid "Once you are done, you can press the Install button, which will unzip all the files in the archive, and import any assets contained therein, such as images or 3D models. Once this is done, you should see a message stating that the Package installation is complete." msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:178 +#: ../../docs/community/asset_library/using_assetlib.rst:178 msgid "|image13|" msgstr "" -#: ../../docs/tutorials/assetlib/using_assetlib.rst:180 +#: ../../docs/community/asset_library/using_assetlib.rst:180 msgid "You may also use the Import button to import asset archives obtained elsewhere (such as downloading them directly from the AssetLib web frontend), which will take you through the same package installation procedure as with the assets downloaded directly via Godot that we just covered." msgstr "" diff --git a/sphinx/templates/tutorials/assetlib/what_is_assetlib.pot b/sphinx/templates/community/asset_library/what_is_assetlib.pot similarity index 78% rename from sphinx/templates/tutorials/assetlib/what_is_assetlib.pot rename to sphinx/templates/community/asset_library/what_is_assetlib.pot index 8f403c0d14..281936c151 100644 --- a/sphinx/templates/tutorials/assetlib/what_is_assetlib.pot +++ b/sphinx/templates/community/asset_library/what_is_assetlib.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,54 +16,54 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:4 +#: ../../docs/community/asset_library/what_is_assetlib.rst:4 msgid "About the Asset Library" msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:6 +#: ../../docs/community/asset_library/what_is_assetlib.rst:6 msgid "The Godot Asset Library, otherwise known as the AssetLib, is a repository of user-submitted Godot addons, scripts, tools, and other resources, collectively referred to as assets. They're available to all Godot users for download directly from within the engine, but it can also be accessed at Godot's `official website `_." msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:11 +#: ../../docs/community/asset_library/what_is_assetlib.rst:11 msgid "On the surface, the Asset Library might look and function similar to asset stores available for other engines, such as Unity's Asset Store, or Unreal Engine's Marketplace, where you can submit both freely-available assets, as well as paid, commercial ones. In addition, often times such assets are distributed under non-free, proprietary licenses, limiting what you can do with them." msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:17 +#: ../../docs/community/asset_library/what_is_assetlib.rst:17 msgid "The Asset Library is different - all assets are distributed free of charge, and under a host of open-source licenses (such as the MIT license, the GPL, and the Boost Software License). This makes the AssetLib more similar to the software repositories of a Linux distribution." msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:21 +#: ../../docs/community/asset_library/what_is_assetlib.rst:21 msgid "This set of pages will cover how to use the AssetLib (both from inside Godot, and on the website), how you can submit your own assets, and what the guidelines for submission are." msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:24 +#: ../../docs/community/asset_library/what_is_assetlib.rst:24 msgid "Please note that the AssetLib is relatively young - it may have various pain points, bugs, and usability issues. As with all Godot projects, the code repository is available on `GitHub `_, where you can submit pull requests and issues, so please do not hesitate to visit it!" msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:29 +#: ../../docs/community/asset_library/what_is_assetlib.rst:29 msgid "Types of assets" msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:31 +#: ../../docs/community/asset_library/what_is_assetlib.rst:31 msgid "Be aware that there are, broadly, two different types of assets you can post." msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:33 +#: ../../docs/community/asset_library/what_is_assetlib.rst:33 msgid "Assets labeled as \"Templates\", \"Projects\", or \"Demos\" appear under the \"Templates\" tab in the Godot project manager. These assets are standalone Godot projects that can run by themselves." msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:37 +#: ../../docs/community/asset_library/what_is_assetlib.rst:37 msgid "Other assets show up inside of the Godot editor under the \"AssetLib\" main screen tab, next to \"2D\", \"3D\", and \"Script\". These assets are meant to be downloaded and placed into an existing Godot project." msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:42 +#: ../../docs/community/asset_library/what_is_assetlib.rst:42 msgid "Frequently asked questions" msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:45 +#: ../../docs/community/asset_library/what_is_assetlib.rst:45 msgid "Can paid assets be uploaded to the asset library?" msgstr "" -#: ../../docs/tutorials/assetlib/what_is_assetlib.rst:47 +#: ../../docs/community/asset_library/what_is_assetlib.rst:47 msgid "Not to the official one, though in the future, there might be other asset libraries which allow it. That said, you are allowed to monetize and sell Godot assets outside the Asset Library." msgstr "" diff --git a/sphinx/templates/community/channels.pot b/sphinx/templates/community/channels.pot index 742b1bdb56..76c96b961d 100644 --- a/sphinx/templates/community/channels.pot +++ b/sphinx/templates/community/channels.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,89 +41,101 @@ msgid "`Official Godot Questions & Answers `_" msgstr "" #: ../../docs/community/channels.rst:18 -msgid "IRC on Freenode" +msgid "Rocket.Chat" msgstr "" #: ../../docs/community/channels.rst:20 -msgid "`General: #godotengine `_" -msgstr "" - -#: ../../docs/community/channels.rst:21 -msgid "`Engine development: #godotengine-devel `_" -msgstr "" - -#: ../../docs/community/channels.rst:22 -msgid "`Documentation: #godotengine-doc `_" +msgid "`Godot Contributors Chat `_" msgstr "" #: ../../docs/community/channels.rst:23 -msgid "`Pull request meetings: #godotengine-meeting `_" +msgid "IRC on Freenode" msgstr "" -#: ../../docs/community/channels.rst:24 -msgid "`GDNative: #godotengine-gdnative `_" -msgstr "" - -#: ../../docs/community/channels.rst:25 -msgid "`Website and public relations: #godotengine-atelier `_" -msgstr "" - -#: ../../docs/community/channels.rst:26 -msgid "`IRC logs `_" +#: ../../docs/community/channels.rst:27 +msgid "As of January 2021, core developer chat has moved to the Godot Contributors Chat platform listed above." msgstr "" #: ../../docs/community/channels.rst:29 -msgid "Other chats" +msgid "`General: #godotengine `_" +msgstr "" + +#: ../../docs/community/channels.rst:30 +msgid "`Engine development: #godotengine-devel `_" msgstr "" #: ../../docs/community/channels.rst:31 -msgid "`Discord `_" +msgid "`Documentation: #godotengine-doc `_" msgstr "" #: ../../docs/community/channels.rst:32 -msgid "`Matrix (IRC compatible) `_" +msgid "`Pull request meetings: #godotengine-meeting `_" +msgstr "" + +#: ../../docs/community/channels.rst:33 +msgid "`GDNative: #godotengine-gdnative `_" +msgstr "" + +#: ../../docs/community/channels.rst:34 +msgid "`Website and public relations: #godotengine-atelier `_" msgstr "" #: ../../docs/community/channels.rst:35 -msgid "Language-based communities" +msgid "`IRC logs `_" msgstr "" -#: ../../docs/community/channels.rst:37 -msgid "See the `User groups `_ page of the website for a list of local communities." +#: ../../docs/community/channels.rst:38 +msgid "Other chats" +msgstr "" + +#: ../../docs/community/channels.rst:40 +msgid "`Discord `_" msgstr "" #: ../../docs/community/channels.rst:41 -msgid "Social networks" -msgstr "" - -#: ../../docs/community/channels.rst:43 -msgid "`GitHub `_" +msgid "`Matrix (IRC compatible) `_" msgstr "" #: ../../docs/community/channels.rst:44 -msgid "`Facebook group `_" +msgid "Language-based communities" msgstr "" -#: ../../docs/community/channels.rst:45 -msgid "`Twitter `_ (see also the `#GodotEngine `_ hashtag)" +#: ../../docs/community/channels.rst:46 +msgid "See the `User groups `_ page of the website for a list of local communities." msgstr "" -#: ../../docs/community/channels.rst:47 -msgid "`Reddit `_" -msgstr "" - -#: ../../docs/community/channels.rst:48 -msgid "`YouTube `_" -msgstr "" - -#: ../../docs/community/channels.rst:49 -msgid "`Steam `_" +#: ../../docs/community/channels.rst:50 +msgid "Social networks" msgstr "" #: ../../docs/community/channels.rst:52 -msgid "Forum" +msgid "`GitHub `_" +msgstr "" + +#: ../../docs/community/channels.rst:53 +msgid "`Facebook group `_" msgstr "" #: ../../docs/community/channels.rst:54 +msgid "`Twitter `_ (see also the `#GodotEngine `_ hashtag)" +msgstr "" + +#: ../../docs/community/channels.rst:56 +msgid "`Reddit `_" +msgstr "" + +#: ../../docs/community/channels.rst:57 +msgid "`YouTube `_" +msgstr "" + +#: ../../docs/community/channels.rst:58 +msgid "`Steam `_" +msgstr "" + +#: ../../docs/community/channels.rst:61 +msgid "Forum" +msgstr "" + +#: ../../docs/community/channels.rst:63 msgid "`Godot Forums `_" msgstr "" diff --git a/sphinx/templates/community/contributing/best_practices_for_engine_contributors.pot b/sphinx/templates/community/contributing/best_practices_for_engine_contributors.pot index ec76ae6b50..06f8101eed 100644 --- a/sphinx/templates/community/contributing/best_practices_for_engine_contributors.pot +++ b/sphinx/templates/community/contributing/best_practices_for_engine_contributors.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -53,7 +53,7 @@ msgid "#1: The problem always comes first" msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:36 -msgid "Many contributors are extremely creative and just enjoy the process of designing abstract data structures, creating nice user interfaces, or simply love programming. Whatever the case may be, they come up with cool ideas, which may not be actually solving any actual problems." +msgid "Many contributors are extremely creative and just enjoy the process of designing abstract data structures, creating nice user interfaces, or simply love programming. Whatever the case may be, they come up with cool ideas, which may or may not be solving any real problems." msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:43 @@ -109,7 +109,7 @@ msgid "The frequency the problem" msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:91 -msgid "If the problem is *too complex* for most users to solve, the software must offer a ready-made solution for it. Likewise, if the problem is easy for the user to workaround, offering such a solution is unnecessary and it's up to the user to do it." +msgid "If the problem is *too complex* for most users to solve, the software must offer a ready-made solution for it. Likewise, if the problem is easy for the user to work around, offering such a solution is unnecessary and it's up to the user to do it." msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:96 @@ -125,7 +125,7 @@ msgid "#4: The solution must be discussed with others" msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:107 -msgid "It is often the case that, when users stumble upon problems, they are only immersed in their own project, so they will naturally try to solve the problem from their own perspective, thinking only about their use case." +msgid "It is often the case that when users stumble upon problems, they are only immersed in their project, so they will naturally try to solve the problem from their perspective, thinking only about their use case." msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:111 @@ -161,7 +161,7 @@ msgid "The situation will often take a turn for the worse when, in order to make msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:150 -msgid "The main problem is that, in reality, it rarely works this way. Most of the time, just writing an individual solution to each problem results in code that is simpler and more maintainable." +msgid "The main problem is that, in reality, it rarely works this way. Most of the time, writing an individual solution to each problem results in code that is simpler and more maintainable." msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:154 @@ -169,7 +169,7 @@ msgid "Additionally, solutions that target individual problems are better for th msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:159 -msgid "Big and flexible solutions also have an additional drawback which is that, over time, they are rarely flexible enough for all users, which keep requesting more functions added (and making the API and codebase more and more complex)." +msgid "Big and flexible solutions also have an additional drawback which is that, over time, they are rarely flexible enough for all users, who keep requesting more functions added (and making the API and codebase more and more complex)." msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:164 @@ -233,7 +233,7 @@ msgid "Not every problem has a simple solution and, many times, the right choice msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:228 -msgid "As Godot requires to be shipped in a large amount of platforms, we just can't link libraries dynamically. Instead, we bundle them in our source tree." +msgid "As Godot requires to be shipped in a large amount of platforms, we can't link libraries dynamically. Instead, we bundle them in our source tree." msgstr "" #: ../../docs/community/contributing/best_practices_for_engine_contributors.rst:233 diff --git a/sphinx/templates/community/contributing/bisecting_regressions.pot b/sphinx/templates/community/contributing/bisecting_regressions.pot index 44dc9110bf..513067ed83 100644 --- a/sphinx/templates/community/contributing/bisecting_regressions.pot +++ b/sphinx/templates/community/contributing/bisecting_regressions.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/community/contributing/bug_triage_guidelines.pot b/sphinx/templates/community/contributing/bug_triage_guidelines.pot index 6a46de3401..af1d87e3c2 100644 --- a/sphinx/templates/community/contributing/bug_triage_guidelines.pot +++ b/sphinx/templates/community/contributing/bug_triage_guidelines.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,221 +21,319 @@ msgid "Bug triage guidelines" msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:6 -msgid "This page describes the typical workflow of the bug triage team aka bugsquad when handling issues and pull requests on Godot's `GitHub `_ repository. It is bound to evolve together with the bugsquad, so do not hesitate to propose modifications to the following guidelines." +msgid "This page describes the typical workflow of the bug triage team aka bugsquad when handling issues and pull requests on Godot's `GitHub repository `__. It is bound to evolve together with the bugsquad, so do not hesitate to propose modifications to the following guidelines." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:12 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:13 msgid "Issues management" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:14 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:15 msgid "GitHub proposes various features to manage issues:" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:16 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:17 msgid "Set one or several labels from a predefined list" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:17 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:18 msgid "Set one milestone from a predefined list" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:18 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:19 msgid "Keep track of the issue in the project dashboard" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:19 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:20 msgid "Define one contributor as \"assignee\" among the Godot engine organization members" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:22 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:23 msgid "As the Godot engine organization on GitHub currently has a restricted number of contributors, we do not use assignees extensively for now. All contributors are welcome to take on any issue, if relevant after mentioning it on the issue ticket and/or discussing the best way to resolve it with other developers." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:28 -msgid "For the time being we do not use the project dashboard feature either." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:29 +msgid "For the time being, we do not use the project dashboard feature either." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:30 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:31 msgid "As far as possible, we try to assign labels (and milestones, when relevant) to both issues and pull requests." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:34 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:35 msgid "Labels" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:36 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:37 msgid "The following labels are currently defined in the Godot repository:" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:38 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:39 msgid "**Categories:**" msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:40 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:41 msgid "*Archived*: either a duplicate of another issue, or invalid. Such an issue would also be closed." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:42 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:43 +msgid "*Breaks compat*: describes something that can only be fixed by breaking compatibility with existing projects." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:45 msgid "*Bug*: describes something that is not working properly." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:43 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:46 +msgid "*Cherrypick*: describes something that can be backported to a stable branch after being merged in the ``master`` branch." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:48 +msgid "*Crash:* describes a bug that causes the engine to crash. This label is only used for \"hard\" crashes, not freezes." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:50 msgid "*Confirmed*: has been confirmed by at least one other contributor than the bug reporter (typically for *Bug* reports). The purpose of this label is to let developers know which issues are still reproducible when they want to select what to work on. It is therefore a good practice to add in a comment on what platform and what version or commit of Godot the issue could be reproduced; if a developer looks at the issue one year later, the *Confirmed* label may not be relevant anymore." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:51 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:58 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:158 msgid "*Discussion*: the issue is not consensual and needs further discussion to define what exactly should be done to address the topic." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:54 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:61 msgid "*Documentation*: issue related to the documentation. Mainly to request enhancements in the API documentation. Issues related to the ReadTheDocs documentation should be filed on the `godot-docs `_ repository." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:58 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:65 msgid "*Enhancement*: describes a proposed enhancement to an existing functionality." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:60 -msgid "*Feature proposal*: describes a wish for a new feature to be implemented." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:67 +msgid "*Feature proposal*: describes a wish for a new feature to be implemented. Note that the main Godot repository no longer accepts feature requests. Please use `godot-proposals `__ instead." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:62 -msgid "*Junior job*: the issue is *assumed* to be an easy one to fix, which makes it a great fit for junior contributors who need to become familiar with the code base." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:65 -msgid "*Needs rebase*: the issue need a Git rebase to be merged." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:66 -msgid "*Needs testing*: the issue/pull request could not be completely tested and thus need further testing. This can mean that it needs to be tested on different hardware/software configurations or even that the steps to reproduce are not certain." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:70 -msgid "*Performance*: issues that directly impact engine or editor performance. Can also be used for pull requests that improve performance or add low-end-friendly options. Should not be coupled with *Usability*." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:71 +msgid "*For PR meeting*: the issue needs to be discussed in a pull request meeting. These meetings are public and are held on the `Godot Contributors Chat `_." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:73 -msgid "*PR welcome / Hero wanted!*: Contributions for issues with these labels are especially welcome. Note that this **doesn't** mean you can't work on issues without these labels." +msgid "*Junior job*: the issue is *assumed* to be an easy one to fix, which makes it a great fit for junior contributors who need to become familiar with the code base." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:76 -msgid "*Regression*: the bug appeared after a stable release not exhibiting the bug was released." +msgid "*High priority:* the issue is particularly important as it can prevent people from releasing their projects or cause data loss." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:78 -msgid "*Salvageable*: the pull request can't be merged due to design issues or merge conflicts and its author is not active anymore. However, it can still be picked up by an external contributor to bring it to a mergeable state. To do so, you need to open a new pull request based on the original pull request." +msgid "*Needs work*: the pull request needs additional work before it can be merged." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:82 -msgid "*Tracker*: issue used to track other issues (like all issues related to the plugin system)." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:79 +msgid "*Needs testing*: the issue/pull request could not be completely tested and thus need further testing. This can mean that it needs to be tested on different hardware/software configurations or even that the steps to reproduce are not certain." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:84 -msgid "*Usability*: issues that directly impact user usability. Should not be coupled with *Performance*." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:83 +msgid "*Performance*: issues that directly impact engine or editor performance. Can also be used for pull requests that improve performance or add low-end-friendly options. Should not be coupled with *Usability*." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:86 -msgid "The categories are used for general triage of the issues. They can be combined in some way when relevant, e.g. an issue can be labelled *Enhancement* and *Usability* at the same time if it's an issue to improve usability. Or *Feature proposal* and *Discussion* if it's a non-consensual feature request, or one that is not precise enough to be worked on." +msgid "*PR welcome / Hero wanted!*: Contributions for issues with these labels are especially welcome. Note that this **doesn't** mean you can't work on issues without these labels." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:92 -msgid "**Topics:**" +#: ../../docs/community/contributing/bug_triage_guidelines.rst:89 +msgid "*Regression*: the bug appeared after a stable release not exhibiting the bug was released." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:94 -msgid "*2D*: relates to 2D-specific issues. Should be coupled with one of the labels below, and should not be coupled with *3D*." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:91 +#: ../../docs/community/contributing/bug_triage_guidelines.rst:169 +msgid "*Salvageable*: the pull request can't be merged due to design issues or merge conflicts and its author is not active anymore. However, it can still be picked up by an external contributor to bring it to a mergeable state. To do so, you need to open a new pull request based on the original pull request." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:95 -msgid "*3D*: relates to 3D-specific issues. Should be coupled with one of the labels below, and should not be coupled with *2D*." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:96 -msgid "*Assetlib*: relates to issues with the asset library." +msgid "*Tracker*: issue used to track other issues (like all issues related to the plugin system)." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:97 -msgid "*Audio*: relates to the audio features (low and high level)." +msgid "*Usability*: issues that directly impact user usability. Should not be coupled with *Performance*." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:98 -msgid "*Buildsystem*: relates to building issues, either linked to the SCons buildsystem or to compiler peculiarities." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:100 -msgid "*Core*: anything related to the core engine. It might be further split later on as it's a pretty big topic." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:102 -msgid "*Drivers*: relates to issues with the drivers used by the engine." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:103 -msgid "*Editor*: relates to issues in the editor (mainly UI)." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:104 -msgid "*GDNative*: relates to the GDNative module." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:99 +msgid "The categories are used for general triage of the issues. They can be combined in some way when relevant, e.g. an issue can be labelled *Enhancement* and *Usability* at the same time if it's an issue to improve usability. Or *Feature proposal* and *Discussion* if it's a non-consensual feature request, or one that is not precise enough to be worked on." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:105 -msgid "*GDScript*: relates to GDScript." -msgstr "" - -#: ../../docs/community/contributing/bug_triage_guidelines.rst:106 -msgid "*Mono*: relates to the C# / Mono bindings." +msgid "**Topics:**" msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:107 -msgid "*Network*: relates to networking." +msgid "*2D*: relates to 2D-specific issues. Should be coupled with one of the labels below, and should not be coupled with *3D*." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:108 -msgid "*Physics*: relates to the physics engine (2D/3D)." +msgid "*3D*: relates to 3D-specific issues. Should be coupled with one of the labels below, and should not be coupled with *2D*." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:109 -msgid "*Plugin*: relates to problems encountered while writing plugins." +msgid "*Assetlib*: relates to issues with the asset library." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:110 -msgid "*Porting*: relates to some specific platforms." +msgid "*Audio*: relates to the audio features (low and high level)." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:111 -msgid "*Rendering*: relates to the 2D and 3D rendering engines." +msgid "*Buildsystem*: relates to building issues, either linked to the SCons buildsystem or to compiler peculiarities." msgstr "" -#: ../../docs/community/contributing/bug_triage_guidelines.rst:112 -msgid "*VisualScript*: relates to issues with the visual scripting language." +#: ../../docs/community/contributing/bug_triage_guidelines.rst:113 +msgid "*Codestyle*: relates to the programming style used within the codebase." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:114 -msgid "Issues would typically correspond to only one topic, though it's not unthinkable to see issues that fit two bills. The general idea is that there will be specialized contributors teams behind all topics, so they can focus on the issues labelled with their team's topic." +msgid "*Core*: anything related to the core engine. It might be further split later on as it's a pretty big topic." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:116 +msgid "*Editor*: relates to issues in the editor (mainly UI)." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:117 +msgid "*GDNative*: relates to the GDNative module." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:118 +msgid "*GDScript*: relates to GDScript." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:119 -msgid "**Platforms:**" +msgid "*GUI*: relates to GUI (Control) nodes." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:120 +msgid "*Import*: relates to the resource import system." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:121 -msgid "*Android*, *HTML5*, *iOS*, *Linux*, *macOS*, *Windows*, *UWP*" +msgid "*Input*: relates to input system." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:122 +msgid "*Mono*: relates to the C# / Mono bindings." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:123 -msgid "By default, it is assumed that a given issue applies to all platforms. If one of the platform labels is used, it is then exclusive and the previous assumption doesn't stand anymore (so if it's a bug on e.g. Android and Linux exclusively, select those two platforms)." +msgid "*Navigation*: relates to the navigation system (including A* and navmeshes)." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:124 +msgid "*Network*: relates to networking." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:125 +msgid "*Physics*: relates to the physics engine (2D/3D)." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:126 +msgid "*Plugin*: relates to problems encountered while writing plugins." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:127 +msgid "*Porting*: relates to some specific platforms or exporting projects." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:128 +msgid "*Rendering*: relates to the 2D and 3D rendering engines." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:129 -msgid "Milestones" +msgid "*Shaders*: relates to the Godot shader language or visual shaders." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:130 +msgid "*Tests*: relates to unit tests." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:131 -msgid "`Milestones `_ correspond to planned future versions of Godot for which there is an existing roadmap. Issues that fit in the said roadmap should be filed under the corresponding milestone; if they don't correspond to any current roadmap, they should be left without milestone. As a rule of thumb, an issue corresponds to a given milestone if it concerns a feature that is new in the milestone, or a critical bug that can't be accepted in any future stable release, or anything that Juan wants to work on right now. :)" +msgid "*Thirdparty*: relates to third-party libraries used in Godot." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:132 +msgid "*VisualScript*: relates to issues with the visual scripting language (*not* visual shaders)." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:133 +msgid "*XR*: relates to Augmented Reality or Virtual Reality." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:135 +msgid "Issues would typically correspond to only one topic, though it's not unthinkable to see issues that fit two bills. The general idea is that there will be specialized contributors teams behind all topics, so they can focus on the issues labelled with their team's topic." msgstr "" #: ../../docs/community/contributing/bug_triage_guidelines.rst:140 +msgid "**Platforms:**" +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:142 +msgid "*Android*, *HTML5*, *iOS*, *Linux*, *macOS*, *Windows*, *UWP*" +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:144 +msgid "By default, it is assumed that a given issue applies to all platforms. If one of the platform labels is used, it is then exclusive and the previous assumption doesn't stand anymore (so if it's a bug on e.g. Android and Linux exclusively, select those two platforms)." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:150 +msgid "Documentation labels" +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:152 +msgid "In the `documentation repository `__, we use the following labels:" +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:155 +msgid "*Bug*: Incorrect information in an existing page. Not to be used for *missing* information." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:157 +msgid "*Class reference*: the issue is about the class reference, not a documentation page." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:161 +msgid "*Enhancememnt*: new information to be added in an existing page." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:162 +msgid "*New page*: a new page to be created." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:163 +msgid "*Hero wanted!*: contributions for issues with these labels are especially welcome. Note that this **doesn't** mean you can't work on issues without these labels." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:166 +msgid "*Organization*: The issue involves moving pages around or reorganizing content." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:167 +msgid "*Redirect*: a redirection needs to be created in the Read the Docs backend. Only administrators can do this." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:173 +msgid "*Topic:Mono*: the issue is about C# support in Godot." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:174 +msgid "*Topic:Website*: the issue relates to the Sphinx/Read the Docs frontend or backend, not the documentation contents." +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:178 +msgid "Milestones" +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:180 +msgid "`Milestones `_ correspond to planned future versions of Godot for which there is an existing roadmap. Issues that fit in the said roadmap should be filed under the corresponding milestone; if they don't correspond to any current roadmap, they should be left without milestone. As a rule of thumb, an issue corresponds to a given milestone if it concerns a feature that is new in the milestone, or a critical bug that can't be accepted in any future stable release, or anything that Juan wants to work on right now. :)" +msgstr "" + +#: ../../docs/community/contributing/bug_triage_guidelines.rst:189 msgid "Contributors are free to pick issues regardless of their assigned milestone; if a fix is proposed for a bug that was not deemed urgent and thus without milestone, it would likely still be very welcome." msgstr "" diff --git a/sphinx/templates/community/contributing/building_the_manual.pot b/sphinx/templates/community/contributing/building_the_manual.pot index 8f16bf1c7c..d767bdfea9 100644 --- a/sphinx/templates/community/contributing/building_the_manual.pot +++ b/sphinx/templates/community/contributing/building_the_manual.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/community/contributing/class_reference_writing_guidelines.pot b/sphinx/templates/community/contributing/class_reference_writing_guidelines.pot new file mode 100644 index 0000000000..2ce22d9d72 --- /dev/null +++ b/sphinx/templates/community/contributing/class_reference_writing_guidelines.pot @@ -0,0 +1,380 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:4 +msgid "Class reference writing guidelines" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:6 +msgid "This page explains how to write the class reference. You will learn where to write new descriptions for the classes, methods, and properties for Godot's built-in node types." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:12 +msgid "To learn to submit your changes to the Godot project using the Git version control system, see :ref:`doc_updating_the_class_reference`." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:15 +msgid "The reference for each class is contained in an XML file like the one below:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:65 +msgid "It starts with brief and long descriptions. In the generated docs, the brief description is always at the top of the page, while the long description lies below the list of methods, variables, and constants. You can find methods, member variables, constants, and signals in separate XML nodes." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:70 +msgid "For each, you want to learn how they work in Godot's source code. Then, fill their documentation by completing or improving the text in these tags:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:73 +msgid "``" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:74 +msgid "``" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:75 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:80 +msgid "``" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:76 +msgid "`` (in its `` tag; return types and arguments don't take separate documentation strings)" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:78 +msgid "``" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:79 +msgid "`` (in its `` tag; arguments don't take separate documentation strings)" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:82 +msgid "Write in a clear and simple language. Always follow the :ref:`writing guidelines ` to keep your descriptions short and easy to read. **Do not leave empty lines** in the descriptions: each line in the XML file will result in a new paragraph, even if it is empty." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:90 +msgid "How to edit class XML" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:92 +msgid "Edit the file for your chosen class in ``doc/classes/`` to update the class reference. The folder contains an XML file for each class. The XML lists the constants and methods you will find in the class reference. Godot generates and updates the XML automatically." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:97 +msgid "For some modules in the engine's source code, you'll find the XML files in the ``modules//doc_classes/`` directory instead." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:100 +msgid "Edit it using your favorite text editor. If you use a code editor, make sure that it doesn't change the indent style: you should use tabs for the XML and four spaces inside BBCode-style blocks. More on that below." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:104 +msgid "To check that the modifications you've made are correct in the generated documentation, navigate to the ``doc/`` folder and run the command ``make rst``. This will convert the XML files to the online documentation's format and output errors if anything's wrong." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:109 +msgid "Alternatively, you can build Godot and open the modified page in the built-in code reference. To learn how to compile the engine, read the :ref:`compilation guide `." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:113 +msgid "We recommend using a code editor that supports XML files like Vim, Atom, Visual Studio Code, Notepad++, or another to comfortably edit the file. You can also use their search feature to find classes and properties quickly." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:120 +msgid "Improve formatting with BBCode style tags" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:122 +msgid "Godot's class reference supports BBCode-like tags. They add nice formatting to the text. Here's the list of available tags:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:126 +msgid "Tag" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:126 +msgid "Effect" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:126 +msgid "Usage" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:126 +msgid "Result" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:128 +msgid "[Class]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:128 +msgid "Link a class" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:128 +msgid "Move the [Sprite2D]." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:128 +msgid "Move the :ref:`class_Sprite`." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:130 +msgid "[method methodname]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:130 +msgid "Link to a method in this class" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:130 +msgid "Call [method hide]." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:130 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:132 +msgid "Call :ref:`hide `." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:132 +msgid "[method Class.methodname]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:132 +msgid "Link to another class's method" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:132 +msgid "Call [method Node3D.hide]." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:134 +msgid "[member membername]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:134 +msgid "Link to a member in this class" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:134 +msgid "Get [member scale]." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:134 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:136 +msgid "Get :ref:`scale `." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:136 +msgid "[member Class.membername]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:136 +msgid "Link to another class's member" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:136 +msgid "Get [member Node2D.scale]." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:138 +msgid "[signal signalname]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:138 +msgid "Link to a signal in this class" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:138 +msgid "Emit [signal renamed]." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:138 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:140 +msgid "Emit :ref:`renamed `." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:140 +msgid "[signal Class.signalname]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:140 +msgid "Link to another class's signal" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:140 +msgid "Emit [signal Node.renamed]." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:142 +msgid "[b] [/b]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:142 +msgid "Bold" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:142 +msgid "Some [b]bold[/b] text." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:142 +msgid "Some **bold** text." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:144 +msgid "[i] [/i]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:144 +msgid "Italic" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:144 +msgid "Some [i]italic[/i] text." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:144 +msgid "Some *italic* text." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:146 +msgid "[code] [/code]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:146 +msgid "Monospace" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:146 +msgid "Some [code]monospace[/code] text." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:146 +msgid "Some ``monospace`` text." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:148 +msgid "[kbd] [/kbd]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:148 +msgid "Keyboard/mouse shortcut" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:148 +msgid "Some [kbd]Ctrl + C[/kbd] key." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:148 +msgid "Some :kbd:`Ctrl + C` key." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:150 +msgid "[codeblock] [/codeblock]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:150 +msgid "Multiline preformatted block" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:150 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:150 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:152 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:152 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:154 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:154 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:156 +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:156 +msgid "*See below.*" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:152 +msgid "[codeblocks] [/codeblocks]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:152 +msgid "[codeblock] for multiple languages" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:154 +msgid "[gdscript] [/gdscript]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:154 +msgid "GDScript codeblock tab in codeblocks" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:156 +msgid "[csharp] [/csharp]" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:156 +msgid "C# codeblock tab in codeblocks" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:159 +msgid "Use ``[codeblock]`` for pre-formatted code blocks. Inside ``[codeblock]``, always use **four spaces** for indentation. The parser will delete tabs. For example:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:171 +msgid "Will display as:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:179 +msgid "If you need to have different code version in GDScript and C#, use ``[codeblocks]`` instead. If you use ``[codeblocks]``, you also need to have at least one of the language-specific tags, ``[gdscript]`` and ``[csharp]``." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:183 +msgid "Always write GDScript code examples first! You can use this `experimental code translation tool `_ to speed up your workflow." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:204 +msgid "The above will display as:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:221 +msgid "To denote important information, add a paragraph starting with \"[b]Note:[/b]\" at the end of the description:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:228 +msgid "To denote crucial information that could cause security issues or loss of data if not followed carefully, add a paragraph starting with \"[b]Warning:[/b]\" at the end of the description:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:236 +msgid "For deprecated properties, add a paragraph starting with \"[i]Deprecated.[/i]\". Notice the use of italics instead of bold:" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:243 +msgid "In all the paragraphs described above, make sure the punctuation is part of the BBCode tags for consistency." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:247 +msgid "I don't know what this method does!" +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:249 +msgid "No problem. Leave it behind, and list the methods you skipped when you request a pull of your changes. Another writer will take care of it." +msgstr "" + +#: ../../docs/community/contributing/class_reference_writing_guidelines.rst:252 +msgid "You can still look at the methods' implementation in Godot's source code on GitHub. If you have doubts, feel free to ask on the `Q&A website `__ and `Godot Contributors Chat `_." +msgstr "" diff --git a/sphinx/templates/community/contributing/code_style_guidelines.pot b/sphinx/templates/community/contributing/code_style_guidelines.pot index 12000da008..5379d9d9e4 100644 --- a/sphinx/templates/community/contributing/code_style_guidelines.pot +++ b/sphinx/templates/community/contributing/code_style_guidelines.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -64,246 +64,254 @@ msgstr "" msgid "Third-party code is usually included in the ``thirdparty/`` folder and can thus easily be excluded from formatting scripts. For the rare cases where a third-party code snippet needs to be included directly within a Godot file, you can use ``/* clang-format off */`` and ``/* clang-format on */`` to tell clang-format to ignore a chunk of code." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:52 +#: ../../docs/community/contributing/code_style_guidelines.rst:53 +msgid "These guidelines only cover code formatting. See :ref:`doc_cpp_usage_guidelines` for a list of language features that are permitted in pull requests." +msgstr "" + +#: ../../docs/community/contributing/code_style_guidelines.rst:57 msgid "Using clang-format locally" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:54 +#: ../../docs/community/contributing/code_style_guidelines.rst:59 msgid "First of all, you will need to install clang-format. As of now, you need to use **clang-format 13** to be compatible with Godot's format. Later versions might be suitable, but previous versions may not support all used options, or format some things differently, leading to style issues in pull requests." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:60 -#: ../../docs/community/contributing/code_style_guidelines.rst:261 +#: ../../docs/community/contributing/code_style_guidelines.rst:65 +#: ../../docs/community/contributing/code_style_guidelines.rst:270 msgid "Installation" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:62 +#: ../../docs/community/contributing/code_style_guidelines.rst:67 msgid "Here's how to install clang-format:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:64 +#: ../../docs/community/contributing/code_style_guidelines.rst:69 msgid "Linux: It will usually be available out-of-the-box with the clang toolchain packaged by your distribution. If your distro version is not the required one, you can download a pre-compiled version from the `LLVM website `__, or if you are on a Debian derivative, use the `upstream repos `__." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:69 +#: ../../docs/community/contributing/code_style_guidelines.rst:74 msgid "macOS and Windows: You can download precompiled binaries from the `LLVM website `__. You may need to add the path to the binary's folder to your system's ``PATH`` environment variable to be able to call ``clang-format`` out of the box." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:74 +#: ../../docs/community/contributing/code_style_guidelines.rst:79 msgid "You then have different possibilities to apply clang-format to your changes:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:77 -#: ../../docs/community/contributing/code_style_guidelines.rst:273 +#: ../../docs/community/contributing/code_style_guidelines.rst:82 +#: ../../docs/community/contributing/code_style_guidelines.rst:282 msgid "Manual usage" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:79 +#: ../../docs/community/contributing/code_style_guidelines.rst:84 msgid "You can apply clang-format manually one or more files with the following command:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:86 +#: ../../docs/community/contributing/code_style_guidelines.rst:91 msgid "``-i`` means that the changes should be written directly to the file (by default clang-format would only output the fixed version to the terminal)." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:88 +#: ../../docs/community/contributing/code_style_guidelines.rst:93 msgid "The path can point to several files, either one after the other or using wildcards like in a typical Unix shell. Be careful when globbing so that you don't run clang-format on compiled objects (.o and .a files) that are in Godot's tree. So better use ``core/*.{cpp,h}`` than ``core/*``." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:94 -#: ../../docs/community/contributing/code_style_guidelines.rst:288 +#: ../../docs/community/contributing/code_style_guidelines.rst:99 +#: ../../docs/community/contributing/code_style_guidelines.rst:297 msgid "Pre-commit hook" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:96 +#: ../../docs/community/contributing/code_style_guidelines.rst:101 msgid "For ease of use, we provide a pre-commit hook for Git that will run clang-format automatically on all your commits to check them, and let you apply its changes in the final commit." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:100 +#: ../../docs/community/contributing/code_style_guidelines.rst:105 msgid "This \"hook\" is a script which can be found in ``misc/hooks``, refer to that folder's README.md for installation instructions." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:103 +#: ../../docs/community/contributing/code_style_guidelines.rst:108 msgid "If your clang-format is not in the ``PATH``, you may have to edit the ``pre-commit-clang-format`` to point to the correct binary for it to work. The hook was tested on Linux and macOS, but should also work in the Git Shell on Windows." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:109 +#: ../../docs/community/contributing/code_style_guidelines.rst:114 msgid "IDE plugin" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:111 +#: ../../docs/community/contributing/code_style_guidelines.rst:116 msgid "Most IDEs or code editors have beautifier plugins that can be configured to run clang-format automatically, for example each time you save a file." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:114 +#: ../../docs/community/contributing/code_style_guidelines.rst:119 msgid "Here is a non-exhaustive list of beautifier plugins for some IDEs:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:116 +#: ../../docs/community/contributing/code_style_guidelines.rst:121 msgid "Qt Creator: `Beautifier plugin `__" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:117 +#: ../../docs/community/contributing/code_style_guidelines.rst:122 msgid "Visual Studio Code: `Clang-Format `__" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:118 +#: ../../docs/community/contributing/code_style_guidelines.rst:123 msgid "Visual Studio: `ClangFormat `__" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:119 +#: ../../docs/community/contributing/code_style_guidelines.rst:124 msgid "vim: `vim-clang-format `__" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:121 +#: ../../docs/community/contributing/code_style_guidelines.rst:125 +msgid "CLion: Starting from version ``2019.1``, no plugin is required. Instead, enable `ClangFormat `__" +msgstr "" + +#: ../../docs/community/contributing/code_style_guidelines.rst:128 msgid "(Pull requests welcome to extend this list with tested plugins.)" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:124 +#: ../../docs/community/contributing/code_style_guidelines.rst:133 msgid "Header includes" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:126 +#: ../../docs/community/contributing/code_style_guidelines.rst:135 msgid "When adding new C++ or Objective-C files or including new headers in existing ones, the following rules should be followed:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:129 +#: ../../docs/community/contributing/code_style_guidelines.rst:138 msgid "The first lines in the file should be Godot's copyright header and MIT license, copy-pasted from another file. Make sure to adjust the filename." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:131 +#: ../../docs/community/contributing/code_style_guidelines.rst:140 msgid "In a ``.h`` header, include guards should be used with the form ``FILENAME_H``." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:134 +#: ../../docs/community/contributing/code_style_guidelines.rst:143 msgid "In a ``.cpp`` file (e.g. ``filename.cpp``), the first include should be the one where the class is declared (e.g. ``#include \"filename.h\"``), followed by an empty line for separation." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:137 +#: ../../docs/community/contributing/code_style_guidelines.rst:146 msgid "Then come headers from Godot's own code base, included in alphabetical order (enforced by ``clang-format``) with paths relative to the root folder. Those includes should be done with quotes, e.g. ``#include \"core/object.h\"``. The block of Godot header includes should then be followed by an empty line for separation." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:142 +#: ../../docs/community/contributing/code_style_guidelines.rst:151 msgid "Finally, third-party headers (either from ``thirdparty`` or from the system's include paths) come next and should be included with the < and > symbols, e.g. ``#include ``. The block of third-party headers should also be followed by an empty line for separation." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:146 +#: ../../docs/community/contributing/code_style_guidelines.rst:155 msgid "Godot and third-party headers should be included in the file that requires them, i.e. in the `.h` header if used in the declarative code or in the `.cpp` if used only in the imperative code." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:150 +#: ../../docs/community/contributing/code_style_guidelines.rst:159 msgid "Example:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:238 +#: ../../docs/community/contributing/code_style_guidelines.rst:247 msgid "Java" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:240 +#: ../../docs/community/contributing/code_style_guidelines.rst:249 msgid "Godot's Java code (mostly in ``platform/android``) is also enforced via ``clang-format``, so see the instructions above to set it up. Keep in mind that this style guide only applies to code written and maintained by Godot, not third-party code such as the ``java/src/com/google`` subfolder." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:246 +#: ../../docs/community/contributing/code_style_guidelines.rst:255 msgid "Python" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:248 +#: ../../docs/community/contributing/code_style_guidelines.rst:257 msgid "Godot's SCons buildsystem is written in Python, and various scripts included in the source tree are also using Python." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:251 +#: ../../docs/community/contributing/code_style_guidelines.rst:260 msgid "For those, we follow the `Black style guide `__. Blacken your Python changes using `Black `__." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:255 +#: ../../docs/community/contributing/code_style_guidelines.rst:264 msgid "Using black locally" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:257 +#: ../../docs/community/contributing/code_style_guidelines.rst:266 msgid "First of all, you will need to install black. Black requires Python 3.6.0+ to run." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:263 +#: ../../docs/community/contributing/code_style_guidelines.rst:272 msgid "Here's how to install black:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:270 +#: ../../docs/community/contributing/code_style_guidelines.rst:279 msgid "You then have different possibilities to apply black to your changes:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:275 +#: ../../docs/community/contributing/code_style_guidelines.rst:284 msgid "You can apply ``black`` manually to one or more files with the following command:" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:282 +#: ../../docs/community/contributing/code_style_guidelines.rst:291 msgid "``-l 120`` means that the allowed number of characters per line is 120. This number was agreed upon by the developers." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:284 +#: ../../docs/community/contributing/code_style_guidelines.rst:293 msgid "The path can point to several files, either one after the other or using wildcards like in a typical Unix shell." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:290 +#: ../../docs/community/contributing/code_style_guidelines.rst:299 msgid "For ease of use, we provide a pre-commit hook for Git that will run black automatically on all your commits to check them, and let you apply its changes in the final commit." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:294 +#: ../../docs/community/contributing/code_style_guidelines.rst:303 msgid "This \"hook\" is a script which can be found in ``misc/hooks``. Refer to that folder's ``README.md`` for installation instructions." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:299 +#: ../../docs/community/contributing/code_style_guidelines.rst:308 msgid "Editor integration" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:301 +#: ../../docs/community/contributing/code_style_guidelines.rst:310 msgid "Many IDEs or code editors have beautifier plugins that can be configured to run black automatically, for example each time you save a file. For details you can check `Black editor integration `__." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:306 +#: ../../docs/community/contributing/code_style_guidelines.rst:315 msgid "Comment style guide" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:308 +#: ../../docs/community/contributing/code_style_guidelines.rst:317 msgid "This comment style guide applies to all programming languages used within Godot's codebase." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:311 +#: ../../docs/community/contributing/code_style_guidelines.rst:320 msgid "Begin comments with a space character to distinguish them from disabled code." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:312 +#: ../../docs/community/contributing/code_style_guidelines.rst:321 msgid "Use sentence case for comments. Begin comments with an uppercase character and always end them with a period." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:314 +#: ../../docs/community/contributing/code_style_guidelines.rst:323 msgid "Reference variable/function names and values using backticks." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:315 +#: ../../docs/community/contributing/code_style_guidelines.rst:324 msgid "Wrap comments to ~100 characters." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:316 +#: ../../docs/community/contributing/code_style_guidelines.rst:325 msgid "You can use ``TODO:``, ``FIXME:``, ``NOTE:``, or ``HACK:`` as adominitions when needed." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:319 -#: ../../docs/community/contributing/code_style_guidelines.rst:342 +#: ../../docs/community/contributing/code_style_guidelines.rst:328 +#: ../../docs/community/contributing/code_style_guidelines.rst:351 msgid "**Example:**" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:327 +#: ../../docs/community/contributing/code_style_guidelines.rst:336 msgid "Don't repeat what the code says in a comment. Explain the *why* rather than *how*." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:329 +#: ../../docs/community/contributing/code_style_guidelines.rst:338 msgid "**Bad:**" msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:336 +#: ../../docs/community/contributing/code_style_guidelines.rst:345 msgid "You can use Javadoc-style comments above function or macro definitions. It's recommended to use Javadoc-style comments *only* for methods which are not exposed to scripting. This is because exposed methods should be documented in the :ref:`class reference XML ` instead." msgstr "" -#: ../../docs/community/contributing/code_style_guidelines.rst:354 +#: ../../docs/community/contributing/code_style_guidelines.rst:363 msgid "For member variables, don't use Javadoc-style comments but use single-line comments instead:" msgstr "" diff --git a/sphinx/templates/community/contributing/content_guidelines.pot b/sphinx/templates/community/contributing/content_guidelines.pot new file mode 100644 index 0000000000..e2e2212221 --- /dev/null +++ b/sphinx/templates/community/contributing/content_guidelines.pot @@ -0,0 +1,113 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/community/contributing/content_guidelines.rst:4 +msgid "Content guidelines" +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:6 +msgid "This document is here to help us assess what we should include in the official documentation. Below, you will find a couple of principles and recommendations to write accessible content." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:10 +msgid "We want to achieve two goals:" +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:12 +msgid "**Empathize with our users.** We should write in a way that makes it easy for them to learn from the docs." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:14 +msgid "**Write a complete reference manual**. Our goal here is not to teach programming foundations. Instead, we should provide a reference for how Godot's features work." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:19 +msgid "Guidelines and principles" +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:21 +msgid "Below are the guidelines we should strive to follow. They are not hard rules, though: exceptionally, a topic will require breaking one or more of these. Still, we should strive to achieve the two goals listed above." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:26 +msgid "Writing complete and accessible documentation" +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:28 +msgid "**A feature doesn't exist unless it is documented**. If a user can't find information about a feature and how it works, it doesn't exist to them. We should ensure that we cover everything Godot does." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:34 +msgid "When adding or updating an engine feature, the documentation team needs to know about it. Contributors should open an issue on the `godot-docs` repository when their work gets merged and requires documentation." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:38 +msgid "Do your best to keep documents **under 1000 words in length**. If a page goes past that threshold, consider splitting it into two parts if possible. Limiting page size forces us to write concisely and to break large documents so they each focus on a particular problem." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:43 +msgid "Make it clear what **problem** each page or section of a page tackles and what the user will learn from it. Users need to know if they're reading the correct guide to solving problems they encounter. For example, instead of writing the heading \"Signals\", consider writing \"Reacting to changes with signals\". The second title makes it clear what the purpose of signals is." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:51 +msgid "Long section titles lead to long entries in the side menu, which can make navigation cumbersome. Try to keep headings five words long or less." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:54 +msgid "If the page assumes specific knowledge of other Godot features, mention it and link it to the corresponding documentation. For instance, a page about physics may use signals, in which case we could note that the page that introduces signals is a pre-requisite." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:60 +msgid "Limiting cognitive load" +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:62 +msgid "Limit the cognitive load required to read the documentation. The simpler and more explicit language we use, the more efficient it becomes for people to learn. You can do so by:" +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:66 +msgid "Introducing only one new concept at a time whenever possible." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:67 +msgid "Using simple English, as we recommend in our writing guidelines." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:68 +msgid "Including one or more **concrete usage examples**. Prefer a real-world example to abstract code like ``foobar``." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:71 +msgid "While many people may understand more complex language and abstract examples, you will lose others. Also, understandable writing and practical examples benefit everyone." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:75 +msgid "Always make an effort to **put yourself in the user's shoes**. When we understand something thoroughly, it becomes evident to us. We may fail to think about details relevant to a newcomer, but **good documentation meets users where they are**. We should strive to explain each feature's capabilities or intended uses with the most straightforward language possible." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:81 +msgid "Try to remember what you first needed to know when learning about the feature or concept. What new terms did you need to learn? What confused you? What was the hardest to grasp? You will want users to review your work, and we recommend you practice explaining the feature before writing about it." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:88 +msgid "Having programming foundations is a pre-requisite to use a complex engine like Godot. Talking about variables, functions, or classes is acceptable. But we should favor plain language over specific terminology like \"metaprogramming\". If you need to use precise terms, be sure to define them." +msgstr "" + +#: ../../docs/community/contributing/content_guidelines.rst:93 +msgid "When a page assumes knowledge of another engine feature, declare it at the beginning and link to resources that cover what users need. You may also link to other websites for pre-requisites beyond the documentation's scope. For example, you could link to an introduction to programming in the getting started guide, or a website that teaches math theory in the math section." +msgstr "" diff --git a/sphinx/templates/community/contributing/contributing_to_the_documentation.pot b/sphinx/templates/community/contributing/contributing_to_the_documentation.pot new file mode 100644 index 0000000000..6c8c0a3f8f --- /dev/null +++ b/sphinx/templates/community/contributing/contributing_to_the_documentation.pot @@ -0,0 +1,221 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:4 +msgid "Contributing to the documentation" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:6 +msgid "This guide explains how to contribute to Godot's documentation, be it by writing or reviewing pages." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:11 +msgid "If you want to translate pages or the class reference from English to other languages, read :ref:`doc_editor_and_docs_localization`." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:15 +msgid "Getting started" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:17 +msgid "To modify or create pages in the reference manual, you need to edit ``.rst`` files in the `godot-docs GitHub repository `_. Modifying those pages in a pull request triggers a rebuild of the online documentation upon merging." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:22 +msgid "For details on Git usage and the pull request workflow, please refer to the :ref:`doc_pr_workflow` page. Most of what it describes regarding the main godotengine/godot repository is also valid for the docs repository." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:27 +msgid "The class reference's source files are in the `Godot engine repository `_. We generate the :ref:`Godot API ` section of this documentation from them. If you want to update the description of a class, its methods, or properties, read :ref:`doc_updating_the_class_reference`." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:35 +msgid "What is the Godot documentation" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:37 +msgid "The Godot documentation is intended as a comprehensive reference manual for the Godot game engine. It is not meant to contain step-by-step tutorials, except for two game creation tutorials in the Getting Started section." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:41 +msgid "We strive to write factual content in an accessible and well-written language. To contribute, you should also read:" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:44 +msgid "The :ref:`doc_docs_writing_guidelines`. There, you will find rules and recommendations to write in a way that everyone understands." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:46 +msgid "The content guidelines. They explain the principles we follow to write the documentation and the kind of content we accept." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:50 +msgid "Contributing changes" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:52 +msgid "**Pull Requests should use the** ``master`` **branch by default.** Only make Pull Requests against other branches (e.g. ``2.1`` or ``3.0``) if your changes only apply to that specific version of Godot." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:56 +msgid "Though less convenient to edit than a wiki, this Git repository is where we write the documentation. Having direct access to the source files in a revision control system is a plus to ensure our documentation quality." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:61 +msgid "Editing existing pages" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:63 +msgid "To edit an existing page, locate its ``.rst`` source file and open it in your favorite text editor. You can then commit the changes, push them to your fork, and make a pull request. **Note that the pages in** ``classes/`` **should not be edited here.** They are automatically generated from Godot’s `XML class reference `__. See :ref:`doc_updating_the_class_reference` for details." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:70 +msgid "To build the manual and test changes on your computer, see :ref:`doc_building_the_manual`." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:74 +msgid "Editing pages online" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:76 +msgid "You can edit the documentation online by clicking the **Edit on GitHub** link in the top-right of every page." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:79 +msgid "Doing so takes you to the GitHub text editor. You need to have a GitHub account and to log in to use it. Once logged in, you can propose change like so:" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:82 +msgid "Click the **Edit on GitHub** button." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:84 +msgid "On the GitHub page you're taken to, click the pencil icon in the top-right corner near the **Raw**, **Blame**, and **Delete** buttons. It has the tooltip \"Fork this project and edit the file\"." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:88 +msgid "Edit the text in the text editor." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:90 +msgid "At the bottom of the web page, summarize the changes you made and click the button **Propose file change**. Make sure to replace the placeholder \"Update file.rst\" by a short but clear one-line description, as this is the commit title." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:94 +msgid "On the following screens, click the **Create pull request** button until you see a message like *Username wants to merge 1 commit into godotengine:master from Username:patch-1*." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:98 +msgid "Another contributor will review your changes and merge them into the docs if they're good. They may also make changes or ask you to do so before merging." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:102 +msgid "Adding new pages" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:104 +msgid "Before adding a new page, please ensure that it fits in the documentation:" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:106 +msgid "Look for `existing issues `_ or open a new one to see if the page is necessary." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:109 +msgid "Ensure there isn't a page that already covers the topic." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:110 +msgid "Read our :ref:`doc_content_guidelines`." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:112 +msgid "To add a new page, create a ``.rst`` file with a meaningful name in the section you want to add a file to, e.g. ``tutorials/3d/light_baking.rst``." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:115 +msgid "You should then add your page to the relevant \"toctree\" (table of contents, e.g. ``tutorials/3d/index.rst``). Add your new filename to the list on a new line, using a relative path and no extension, e.g. here ``light_baking``." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:120 +msgid "Titles" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:122 +msgid "Always begin pages with their title and a Sphinx reference name:" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:131 +msgid "The reference ``_doc_insert_your_title_here`` and the title should match." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:133 +msgid "The reference allows linking to this page using the ``:ref:`` format, e.g. ``:ref:`doc_insert_your_title_here``` would link to the above example page (note the lack of leading underscore in the reference)." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:137 +msgid "Write your titles like plain sentences, without capitalizing each word:" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:139 +msgid "**Good:** Understanding signals in Godot" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:140 +msgid "**Bad:** Understanding Signals In Godot" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:142 +msgid "Only propers nouns, projects, people, and node class names should have their first letter capitalized." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:146 +msgid "Sphinx and reStructuredText syntax" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:148 +msgid "Check Sphinx’s `reST Primer `__ and the `official reference `__ for details on the syntax." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:152 +msgid "Sphinx uses specific reST comments to do specific operations, like defining the table of contents (``.. toctree::``) or cross-referencing pages. Check the `official Sphinx documentation `__ for more details. To learn how to use Sphinx directives like ``.. note::`` or ``.. seealso::``, check out the `Sphinx directives documentation `__." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:161 +msgid "Adding images and attachments" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:163 +msgid "To add images, please put them in an ``img/`` folder next to the ``.rst`` file with a meaningful name and include them in your page with:" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:170 +msgid "Similarly, you can include attachments, like assets as support material for a tutorial, by placing them into a ``files/`` folder next to the ``.rst`` file, and using this inline markup:" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:180 +msgid "License" +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:182 +msgid "This documentation and every page it contains is published under the terms of the `Creative Commons Attribution 3.0 license (CC-BY-3.0) `_, with attribution to \"Juan Linietsky, Ariel Manzur and the Godot community\"." +msgstr "" + +#: ../../docs/community/contributing/contributing_to_the_documentation.rst:187 +msgid "By contributing to the documentation on the GitHub repository, you agree that your changes are distributed under this license." +msgstr "" diff --git a/sphinx/templates/community/contributing/cpp_usage_guidelines.pot b/sphinx/templates/community/contributing/cpp_usage_guidelines.pot new file mode 100644 index 0000000000..73889e1b3b --- /dev/null +++ b/sphinx/templates/community/contributing/cpp_usage_guidelines.pot @@ -0,0 +1,121 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:4 +msgid "C++ usage guidelines" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:7 +msgid "Rationale" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:9 +msgid "Since Godot 4.0, the C++ standard used throughout the codebase is a subset of **C++17**. While modern C++ brings a lot of opportunities to write faster, more readable code, we chose to restrict our usage of C++ to a subset for a few reasons:" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:14 +msgid "It makes it easier to review code in online editors. This is because engine contributors don't always have access to a full-featured IDE while reviewing code." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:17 +msgid "It makes the code easier to grasp for beginner contributors (who may not be professional C++ programmers). Godot's codebase is known to be easy to learn from, and we'd like to keep it that way." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:21 +msgid "To get your pull request merged, it needs to follow the C++ usage guidelines outlined here. Of course, you can use features not allowed here in your own C++ modules or GDNative scripts." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:27 +msgid "Prior to Godot 4.0, the C++ standard used throughout the codebase was C++03, with a handful of C++14 extensions. If you are contributing a pull request to the `3.x` branch rather than `master`, your code can't use C++17 features. Instead, your code must be able to be built with a C++14 compiler." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:32 +msgid "The guidelines below don't apply to third-party dependencies, although we generally favor small libraries instead of larger solutions. See also :ref:`doc_best_practices_for_engine_contributors`." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:38 +msgid "See :ref:`doc_code_style_guidelines` for formatting guidelines." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:41 +msgid "Disallowed features" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:43 +msgid "**Any feature not listed below is allowed.** Using features like ``constexpr`` variables and ``nullptr`` is encouraged when possible. Still, try to keep your use of modern C++ features conservative. Their use needs to serve a real purpose, such as improving code readability or performance." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:49 +msgid "Standard Template Library" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:51 +msgid "We don't allow using the `STL `__ as Godot provides its own data types (among other things). See :ref:`doc_faq_why_not_stl` for more information." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:55 +msgid "This means that pull requests should **not** use ``std::string``, ``std::vector`` and the like. Instead, use Godot's datatypes as described below:" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:58 +msgid "Use ``String`` instead of ``std::string``." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:59 +msgid "Use ``Vector`` instead of ``std::vector``. In some cases, ``List`` or ``LocalVector`` can be used as an alternative (ask core developers first)." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:61 +msgid "Use ``Array`` instead of ``std::array``." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:64 +msgid "``auto`` keyword" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:66 +msgid "Please don't use the ``auto`` keyword for type inference. While it can avoid repetition, it can also lead to confusing code:" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:77 +msgid "Keep in mind hover documentation often isn't readily available for pull request reviewers. Most of the time, reviewers will use GitHub's online viewer to review pull requests." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:81 +msgid "We chose to forbid ``auto`` instead of allowing it on a case-by-case basis to avoid having to decide on difficult edge cases. Thank you for your understanding." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:85 +msgid "Lambdas" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:87 +msgid "Lambdas should be used conservatively when they make code effectively faster or simpler, and do not impede readability. Please ask before using lambdas in a pull request." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:92 +msgid "``#pragma once`` directive" +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:94 +msgid "To follow the existing style, please use standard ``#ifdef``-based include guards instead of ``#pragma once`` in new files." +msgstr "" + +#: ../../docs/community/contributing/cpp_usage_guidelines.rst:99 +msgid "See :ref:`doc_code_style_guidelines_header_includes` for guidelines on sorting includes in C++ and Objective-C files." +msgstr "" diff --git a/sphinx/templates/community/contributing/docs_writing_guidelines.pot b/sphinx/templates/community/contributing/docs_writing_guidelines.pot index 4b364341f5..57ffa07a66 100644 --- a/sphinx/templates/community/contributing/docs_writing_guidelines.pot +++ b/sphinx/templates/community/contributing/docs_writing_guidelines.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,17 +29,17 @@ msgid "In summary, always try to:" msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:14 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:39 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:44 msgid "Use the direct voice" msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:15 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:74 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:79 msgid "Use precise action verbs" msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:16 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:96 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:101 msgid "Avoid verbs that end in -ing" msgstr "" @@ -52,12 +52,12 @@ msgid "Ban these 8 words: obvious, simple, basic, easy, actual, just, clear, and msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:19 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:214 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:219 msgid "Use explicit references" msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:20 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:235 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:240 msgid "Use 's to show possession" msgstr "" @@ -70,17 +70,17 @@ msgid "There are 3 rules to describe classes:" msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:25 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:372 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:377 msgid "Give an overview of the node in the brief description" msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:26 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:401 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:406 msgid "Mention what methods return if it's useful" msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:27 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:426 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:431 msgid "Use \"if true\" to describe booleans" msgstr "" @@ -88,403 +88,407 @@ msgstr "" msgid "A technical writer's job is to pack as much information as possible into the smallest and clearest sentences possible. These guidelines will help you work towards that goal." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:36 -msgid "7 rules for clear English" +#: ../../docs/community/contributing/docs_writing_guidelines.rst:37 +msgid "See the :ref:`content guidelines ` for information on the types of documentation you can write in the official documentation." msgstr "" #: ../../docs/community/contributing/docs_writing_guidelines.rst:41 +msgid "7 rules for clear English" +msgstr "" + +#: ../../docs/community/contributing/docs_writing_guidelines.rst:46 msgid "Use the direct voice when possible. Take the classes, methods, and constants you describe as the subject. It's natural to write using the passive voice, but it's harder to read and produces longer sentences." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:47 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:52 msgid "Passive:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:53 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:58 msgid "Active:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:59 -#: ../../docs/community/contributing/docs_writing_guidelines.rst:407 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:64 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:412 msgid "**Don't** use the passive voice:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:66 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:71 msgid "**Do** use the node's name as a noun:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:76 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:81 msgid "Favor precise yet common verbs over generic ones like ``make``, ``set``, and any expression you can replace with a single word." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:79 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:84 msgid "**Don't** repeat the method's name. It already states it sets the pivot value to a new one:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:87 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:92 msgid "**Do** explain what's the consequence of this \"set\": use precise verbs like ``place``, ``position``, ``rotate``, ``fade``, etc." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:98 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:103 msgid "The progressive forms describe continuous actions. E.g. \"is calling\", \"is moving\"." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:101 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:106 msgid "**Don't** use the progressive form for instant changes." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:108 -msgid "**Do** use simple present, preterit or future." +#: ../../docs/community/contributing/docs_writing_guidelines.rst:113 +msgid "**Do** use simple present, past, or future." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:115 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:120 msgid "Exception: If the subject is not clear, replacing \"ing\" verbs is not an improvement. For example, in the previous sentence, \"it replaces\" would not make much sense where \"replacing\" currently is." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:119 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:124 msgid "You may use the progressive tense to describe actions that are continuous in time. Anything like animation or coroutines." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:124 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:129 msgid "Verbs can turn into adjectival nouns with -ing. This is not a conjugation, so you may use them: ``the remaining movement``, ``the missing file``, etc." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:129 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:134 msgid "Remove unnecessary adverbs and adjectives" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:131 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:136 msgid "Write as few adjectives and adverbs as possible. Only use them if they add key information to the description." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:134 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:139 msgid "**Don't** use redundant or meaningless adverbs. Words that lengthen the documentation but don't add any information:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:141 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:146 msgid "**Do** write short sentences in a simple, descriptive language:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:148 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:153 msgid "Ban these 8 words" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:150 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:155 msgid "**Don't** ever use these 8 banned words:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:152 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:157 msgid "obvious" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:153 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:158 msgid "simple" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:154 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:159 msgid "basic" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:155 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:160 msgid "easy" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:156 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:161 msgid "actual" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:157 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:162 msgid "just" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:158 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:163 msgid "clear" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:159 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:164 msgid "however (some uses)" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:161 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:166 msgid "Game creation and programming aren't simple, and nothing's easy to someone learning to use the API for the first time. Other words in the list, like ``just`` or ``actual`` won't add any info to the sentence. Don't use corresponding adverbs either: obviously, simply, basically, easily, actually, clearly." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:167 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:172 msgid "**Don't** example. The banned words lengthen the description and take attention away from the most important info:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:175 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:180 msgid "**Do** remove them:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:182 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:187 msgid "\"Simple\" never helps. Remember, for other users, anything could be complex or frustrate them. There's nothing like a good old *it's simple* to make you cringe. Here's the old brief description, the first sentence on the Timer node's page:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:192 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:197 msgid "**Do** explain what the node does instead:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:199 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:204 msgid "**Don't** use \"basic\", it is too vague:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:206 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:211 msgid "**Do** use the brief description to offer an overview of the node:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:216 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:221 msgid "Favor explicit references over implicit ones." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:218 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:223 msgid "**Don't** use words like \"the former\", \"the latter\", etc. They're not the most common in English, and they require you to check the reference." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:225 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:230 msgid "**Do** repeat words. They remove all ambiguity:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:231 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:236 msgid "If you need to repeat the same variable name 3 or 4 times, you probably need to rephrase your description." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:237 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:242 msgid "Avoid \"The milk **of** the cow\". It feels unnatural in English. Write \"The cow's milk\" instead." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:240 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:245 msgid "**Don't** write \"of the X\":" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:246 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:251 msgid "**Do** use ``'s``. It lets you put the main subject at the start of the sentence, and keep it short:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:254 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:259 msgid "Use the Oxford comma to enumerate anything" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:256 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:261 msgid "From the Oxford dictionary:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:258 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:263 msgid "The 'Oxford comma' is an optional comma before the word 'and' at the end of a list: *We sell books, videos, and magazines.*" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:261 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:266 msgid "[...] Not all writers and publishers use it, but it can clarify the meaning of a sentence when the items in a list are not single words: *These items are available in black and white, red and yellow, and blue and green.*" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:264 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:269 msgid "**Don't** leave the last element of a list without a comma:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:270 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:275 msgid "**Do** add a comma before `and` or `or`, for the last element of a list with more than two elements." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:279 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:284 msgid "How to write methods and classes" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:282 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:287 msgid "Dynamic vs static typing" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:284 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:289 msgid "The code examples in the documentation should follow a consistent style not to confuse users. As static type hints are an optional feature of GDScript, we chose to stick to writing dynamic code. This leads to writing GDScript that is concise and accessible." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:289 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:294 msgid "The exception is topics that explain static typing concepts to users." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:291 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:296 msgid "**Don't** add a type hint with a colon or by casting:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:301 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:306 msgid "**Do** write constants and variables with dynamic typing:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:311 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:316 msgid "**Don't** write functions with inferred arguments or return types:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:322 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:327 msgid "**Do** write functions using dynamic typing:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:334 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:339 msgid "Use real-world code examples where appropriate" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:336 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:341 msgid "Real-world examples are more accessible to beginners than abstract ``foos`` and ``bars``. You can also copy them directly from your game projects, ensuring that any code snippet compiles without errors." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:340 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:345 msgid "Writing ``var speed = 10`` rather than ``var my_var = 10`` allows beginners to understand code better. It gives them a frame of reference as to where they could use the code snippets in a live project." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:344 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:349 msgid "**Don't** write made-up examples:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:355 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:360 msgid "**Do** write concrete examples:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:367 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:372 msgid "Of course, there are times when using real-world examples is impractical. In those situations, you should still avoid using names such as ``my_var``, ``foo()`` or ``my_func()`` and consider more meaningful names for your examples." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:374 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:379 msgid "The brief description is the reference's most important sentence. It's the user's first contact with a node:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:377 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:382 msgid "It's the only description in the \"Create New Node\" dialog." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:378 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:383 msgid "It's at the top of every page in the reference" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:380 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:385 msgid "The brief description should explain the node's role and its functionality, in up to 200 characters." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:383 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:388 msgid "**Don't** write tiny and vague summaries:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:390 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:395 msgid "**Do** give an overview of the node's functionality:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:397 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:402 msgid "Use the node's full description to provide more information, and a code example, if possible." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:403 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:408 msgid "Some methods return important values. Describe them at the end of the description, ideally on a new line. No need to mention the return values for any method whose name starts with ``set`` or ``get``." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:414 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:419 msgid "**Do** always use \"Returns\"." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:421 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:426 msgid "Notice the exception to the \"direct voice\" rule: with the move method, an external collider can influence the method and the body that calls ``move``. In this case, you can use the passive voice." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:428 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:433 msgid "For boolean member variables, always use ``if true`` and/or ``if false``, to stay explicit. ``Controls whether or not`` may be ambiguous and won't work for every member variable." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:432 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:437 msgid "Also, surround boolean values, variable names and methods with ``[code][/code]``." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:434 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:439 msgid "**Do** start with \"if true\":" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:443 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:448 msgid "Use ``[code]`` around arguments" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:445 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:450 msgid "In the class reference, always surround arguments with ``[code][/code]``. In the documentation and in Godot, it will display like ``this``. When you edit XML files in the Godot repository, replace existing arguments written like 'this' or \\`this\\` with ``[code]this[/code]``." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:452 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:457 msgid "Common vocabulary to use in Godot's documentation" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:454 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:459 msgid "The developers chose some specific words to refer to areas of the interface. They're used in the sources, in the documentation, and you should always use them instead of synonyms, so the users know what you're talking about." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:462 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:467 msgid "Overview of the interface and common vocabulary" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:464 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:469 msgid "In the top left corner of the editor lie the ``main menus``. In the center, the buttons change the ``workspace``. And together the buttons in the top right are the ``playtest buttons``. The area in the center, that displays the 2D or the 3D space, is the ``viewport``. At its top, you find a list of ``tools`` inside the ``toolbar``." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:470 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:475 msgid "The tabs or dockable panels on either side of the viewport are ``docks``. You have the ``FileSystem dock``, the ``Scene dock`` that contains your scene tree, the ``Import dock``, the ``Node dock``, and the ``Inspector`` or ``Inspector dock``. With the default layout you may call the tabbed docks ``tabs``: the ``Scene tab``, the ``Node tab``..." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:476 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:481 msgid "The Animation, Debugger, etc. at the bottom of the viewport are ``panels``. Together they make up the ``bottom panels``." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:479 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:484 msgid "Foldable areas of the Inspector are ``sections``. The node's parent class names, which you can't fold, are ``Classes`` e.g. the ``KinematicBody2D class``. And individual lines with key-value pairs are ``properties``. E.g. ``position`` or ``modulate color`` are both ``properties``." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:486 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:491 msgid "Keyboard shortcut guidelines" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:488 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:493 msgid "Keyboard and mouse shortcuts should make use of the ``:kbd:`` tag, which allows shortcuts to stand out from the rest of the text and inline code. Use the compact form for modifier keys (:kbd:`Ctrl`/:kbd:`Cmd`) instead of their spelled out form (:kbd:`Control`/:kbd:`Command`). For combinations, use the ``+`` symbol with a space on either side of the symbol." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:494 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:499 msgid "Make sure to mention shortcuts that differ on macOS compared to other platforms. On macOS, ``Cmd`` often replaces ``Ctrl`` in keyboard shortcuts." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:497 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:502 msgid "Try to integrate the shortcut into sentences the best you can. Here are some examples with the ``:kbd:`` tag left as-is for better visibility:" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:500 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:505 msgid "Press ``:kbd:`Ctrl + Alt + T``` to toggle the panel (``:kbd:`Cmd + Alt + T``` on macOS)." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:501 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:506 msgid "Press ``:kbd:`Space``` and hold the left mouse button to pan in the 2D editor." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:502 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:507 msgid "Press ``:kbd:`Shift + Up Arrow``` to move the node upwards by 8 pixels." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:505 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:510 msgid "Image contribution guidelines" msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:507 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:512 msgid "A significant part of the documentation is images, and there are several important guidelines to follow." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:510 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:515 msgid "First, you should always be using the default editor theme and text when taking screenshots." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:513 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:518 msgid "To improve the appearance of 3D screenshots, use 4× MSAA, enable anisotropic filtering on the project's textures, and set the anisotropic filter quality to 16× in Project Settings." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:517 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:522 msgid "Screenshot sizes should not exceed 1920×1080 to ensure fast loading on slower connections." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:520 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:525 msgid "When you need to highlight an area of the editor to show something, like a button or option, use a 2 pixel-thick yellow outline without a bevel. If the outline is on a dark background, the outline should be yellow so it can be easily seen by colorblind people. Please do not use red as it won't be visible for some users." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:526 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:531 msgid "Before you add or replace any images in the documentation, they should be run through a PNG compressor to save size. You can use the lossless OxiPNG compressor included in `Squoosh `__ for this purpose. For heavier images, consider using a lossy compressor like `pngquant `_. With it, almost no image quality is lost during compression." msgstr "" -#: ../../docs/community/contributing/docs_writing_guidelines.rst:535 +#: ../../docs/community/contributing/docs_writing_guidelines.rst:540 msgid "The program pngquant must be installed locally as it's not available in Squoosh." msgstr "" diff --git a/sphinx/templates/community/contributing/documentation_guidelines.pot b/sphinx/templates/community/contributing/documentation_guidelines.pot index 5672a4021e..e8e91b1c8a 100644 --- a/sphinx/templates/community/contributing/documentation_guidelines.pot +++ b/sphinx/templates/community/contributing/documentation_guidelines.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -37,121 +37,121 @@ msgid "For details on Git usage and the pull request workflow, please refer to t msgstr "" #: ../../docs/community/contributing/documentation_guidelines.rst:28 -msgid "The README.md file contains all the information you need to get you started, please read it. In particular, it contains some tips and tricks and links to reference documentation about the reStructuredText markup language." +msgid "The class reference's source files are in the `Godot engine repository `_. We generate the :ref:`Godot API ` section of this documentation from them. If you want to update the description of a class, its methods, or properties, read :ref:`doc_updating_the_class_reference`." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:32 +#: ../../docs/community/contributing/documentation_guidelines.rst:34 msgid "If you want to edit the **API reference**, please note that it should *not* be done in the godot-docs repository. Instead, you should edit the ``doc/classes/*`` XML files of Godot's main repository. These files are then later used to generate the in-editor documentation as well as the API reference of the online docs. Read more here: :ref:`doc_updating_the_class_reference`." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:40 +#: ../../docs/community/contributing/documentation_guidelines.rst:42 msgid "The 'Edit on GitHub' link" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:42 +#: ../../docs/community/contributing/documentation_guidelines.rst:44 msgid "If you're reading documentation on `docs.godotengine.org `_, you'll see an **Edit on GitHub** hyperlink at the top right of the page. Once you've created a GitHub account, you can propose changes to a page you're reading as follows:" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:47 +#: ../../docs/community/contributing/documentation_guidelines.rst:49 msgid "Click the **Edit on GitHub** button." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:49 +#: ../../docs/community/contributing/documentation_guidelines.rst:51 msgid "On the GitHub page you're taken to, click the pencil icon in the top-right corner near the **Raw**, **Blame** and **History** buttons. It has the tooltip \"Edit the file in a fork of this project\"." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:53 +#: ../../docs/community/contributing/documentation_guidelines.rst:55 msgid "Complete all the edits you want to make for that page." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:55 +#: ../../docs/community/contributing/documentation_guidelines.rst:57 msgid "Summarize the changes you made in the form at the bottom of the page and click the button labelled **Propose file change** when done." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:58 +#: ../../docs/community/contributing/documentation_guidelines.rst:60 msgid "On the following screens, click the **Create pull request** button until you see a message like *Username wants to merge 1 commit into godotengine:master from Username:patch-6*." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:62 +#: ../../docs/community/contributing/documentation_guidelines.rst:64 msgid "A reviewer will evaluate your changes and incorporate them into the docs if they're acceptable. You might also be asked to make modifications to your changes before they're included." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:67 +#: ../../docs/community/contributing/documentation_guidelines.rst:69 msgid "What makes good documentation?" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:69 +#: ../../docs/community/contributing/documentation_guidelines.rst:71 msgid "Documentation should be well written in plain English, using well-formed sentences and various levels of sections and subsections. It should be clear and objective. Also, have a look at the :ref:`doc_docs_writing_guidelines`." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:73 +#: ../../docs/community/contributing/documentation_guidelines.rst:75 msgid "We differentiate tutorial pages from other documentation pages by these definitions:" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:76 +#: ../../docs/community/contributing/documentation_guidelines.rst:78 msgid "Tutorial: a page aiming at explaining how to use one or more concepts in the editor or scripts in order to achieve a specific goal with a learning purpose (e.g. \"Making a simple 2d Pong game\", \"Applying forces to an object\")." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:80 +#: ../../docs/community/contributing/documentation_guidelines.rst:82 msgid "Documentation: a page describing precisely one and only one concept at a time, if possible exhaustively (e.g. the list of methods of the Sprite class, or an overview of the input management in Godot)." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:84 +#: ../../docs/community/contributing/documentation_guidelines.rst:86 msgid "You are free to write the kind of documentation you wish, as long as you respect the following rules (and the ones on the repo)." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:88 +#: ../../docs/community/contributing/documentation_guidelines.rst:90 msgid "Titles" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:90 +#: ../../docs/community/contributing/documentation_guidelines.rst:92 msgid "Always begin pages with their title and a Sphinx reference name:" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:99 +#: ../../docs/community/contributing/documentation_guidelines.rst:101 msgid "The reference allows linking to this page using the ``:ref:`` format, e.g. ``:ref:`doc_insert_your_title_here``` would link to the above example page (note the lack of leading underscore in the reference)." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:103 +#: ../../docs/community/contributing/documentation_guidelines.rst:105 msgid "Also, avoid American CamelCase titles: title's first word should begin with a capitalized letter, and every following word should not. Thus, this is a good example:" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:107 +#: ../../docs/community/contributing/documentation_guidelines.rst:109 msgid "Insert your title here" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:109 +#: ../../docs/community/contributing/documentation_guidelines.rst:111 msgid "And this is a bad example:" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:111 +#: ../../docs/community/contributing/documentation_guidelines.rst:113 msgid "Insert Your Title Here" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:113 +#: ../../docs/community/contributing/documentation_guidelines.rst:115 msgid "Only project, people and node class names should have capitalized first letter." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:117 +#: ../../docs/community/contributing/documentation_guidelines.rst:119 msgid "Translating existing pages" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:119 +#: ../../docs/community/contributing/documentation_guidelines.rst:121 msgid "You can help to translate the official Godot documentation on our `Hosted Weblate `_." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:128 +#: ../../docs/community/contributing/documentation_guidelines.rst:130 msgid "There also is the official `Godot i18n repository `_ where you can see when the data was last synchronized." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:133 +#: ../../docs/community/contributing/documentation_guidelines.rst:135 msgid "License" msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:135 +#: ../../docs/community/contributing/documentation_guidelines.rst:137 msgid "This documentation and every page it contains is published under the terms of the `Creative Commons Attribution 3.0 license (CC-BY-3.0) `_, with attribution to \"Juan Linietsky, Ariel Manzur and the Godot community\"." msgstr "" -#: ../../docs/community/contributing/documentation_guidelines.rst:138 +#: ../../docs/community/contributing/documentation_guidelines.rst:140 msgid "By contributing to the documentation on the GitHub repository, you agree that your changes are distributed under this license." msgstr "" diff --git a/sphinx/templates/community/contributing/editor_and_docs_localization.pot b/sphinx/templates/community/contributing/editor_and_docs_localization.pot index 7b7ead38fb..6457e414a9 100644 --- a/sphinx/templates/community/contributing/editor_and_docs_localization.pot +++ b/sphinx/templates/community/contributing/editor_and_docs_localization.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -113,7 +113,7 @@ msgid "On that page, you have:" msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:114 -msgid "A toolbar which lets you cycle through strings of the current list, change to another pre-defined list or do a custom search, etc. There is also a \"Zen\" editing mode with a simplified interface." +msgid "A toolbar which lets you cycle through strings of the current list, change to another predefined list or do a custom search, etc. There is also a \"Zen\" editing mode with a simplified interface." msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:117 @@ -149,7 +149,7 @@ msgid "The editor interface's translation template is generated by parsing all t msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:167 -msgid "The online documentation's translation template is generated from the source RST files in the same order as seen in the **table of contents**, so for example the first strings are from the front page of the documentation. The recommended workflow is therefore to find a unique string corresponding to a page that you want to translate, and then translate all the strings with the same source string location while comparing with the online version of that page in English. An example of source string location could be ``getting_started/step_by_step/scenes_and_nodes.rst`` for the page :ref:`doc_scenes_and_nodes`." +msgid "The online documentation's translation template is generated from the source RST files in the same order as seen in the **table of contents**, so for example the first strings are from the front page of the documentation. The recommended workflow is therefore to find a unique string corresponding to a page that you want to translate, and then translate all the strings with the same source string location while comparing with the online version of that page in English. An example of source string location could be ``getting_started/step_by_step/nodes_and_scenes.rst`` for the page :ref:`doc_nodes_and_scenes`." msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:176 @@ -157,11 +157,11 @@ msgid "The class reference's translation template is generated from the source X msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:185 -msgid "A handy tool to locate specific pages/classes is to use Weblate's advanced search feature, and especially the \"Location strings\" query (which can also be used with the ``location:`` token, e.g. ``location:scenes_and_nodes.rst``):" +msgid "A handy tool to locate specific pages/classes is to use Weblate's advanced search feature, and especially the \"Location strings\" query (which can also be used with the ``location:`` token, e.g. ``location:nodes_and_scenes.rst``):" msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:195 -msgid "When a given source string is used in multiple source locations, they will all be concatenated into one. For example, the above ``location:scenes_and_nodes.rst`` query would land first on the \"Introduction\" source string which is used in dozens of pages, including some that come before ``scenes_and_nodes.rst`` in the template. Clicking the \"Next\" button then brings us to the \"Scene and nodes\" title string displayed above. So it may happen that a given paragraph or section title is not at the location you'd expect it when reading the online version of a page." +msgid "When a given source string is used in multiple source locations, they will all be concatenated into one. For example, the above ``location:nodes_and_scenes.rst`` query would land first on the \"Introduction\" source string which is used in dozens of pages, including some that come before ``nodes_and_scenes.rst`` in the template. Clicking the \"Next\" button then brings us to the \"Scene and nodes\" title string displayed above. So it may happen that a given paragraph or section title is not at the location you'd expect it when reading the online version of a page." msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:206 @@ -189,109 +189,113 @@ msgid "**C escape characters** such as ``\\n`` (line break) or ``\\t`` (tabulati msgstr "" #: ../../docs/community/contributing/editor_and_docs_localization.rst:247 +msgid "Only logical order of the characters matters, in the right-to-left text, format specifiers may be displayed as ``s%``." +msgstr "" + +#: ../../docs/community/contributing/editor_and_docs_localization.rst:251 msgid "Online documentation (RST)" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:249 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:253 msgid "The documentation translations originate from reStructuredText (RST) files, which also use their own markup syntax to style text, create internal and external links, etc. Here are some examples::" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:291 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:295 msgid "See Sphinx's `reStructured Text primer `__ for a quick overview of the markup language you may find in source strings. You may encounter especially the inline markup (bold, italics, inline code) and the internal and external hyperlink markup." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:297 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:301 msgid "Class reference (BBCode)" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:299 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:303 msgid "The class reference is documented in the main Godot repository using XML files, and with BBCode-like markup for styling and internal references." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:302 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:306 msgid "Some of the tags used are from the original BBCode (e.g. ``[b]Bold[/b]`` and ``[i]Italics[/i]``), while others are Godot-specific and used for advanced features such as inline code (e.g. ``[code]true[/code]``), linking to another class (e.g. ``[Node2D]``) or to a property in a given class (e.g. ``[member Node2D.position]``), or for multiline code blocks. Example::" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:314 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:318 msgid "In the above example, ``[code]name[/code]``, ``[code]alpha[/code]``, and ``[Color]`` should *not* be translated, as they refer respectively to argument names and a class of the Godot API. Similarly, the contents of the ``[codeblock]`` should not be translated, as ``ColorN`` is a function of the Godot API and ``\"red\"`` is one of the named colors it supports. At most, you can translate the name of the variable which holds the result (``red = ...``)." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:321 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:325 msgid "Note also that in the XML, each line is a paragraph, so you should not add line breaks if they are not part of the original translation." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:326 -msgid "See our documentation for class reference writers for the :ref:`list of BBCode-like tags ` which are used throughout the class reference." +#: ../../docs/community/contributing/editor_and_docs_localization.rst:330 +msgid "See our documentation for class reference writers for the :ref:`list of BBCode-like tags ` which are used throughout the class reference." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:331 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:335 msgid "Offline translation and testing" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:333 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:337 msgid "While we advise using the Weblate interface to write translations, you also have the possibility to download the PO file locally to translate it with your preferred PO editing application, such as `Poedit `__ or `Lokalize `__." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:338 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:342 msgid "To download the PO file locally, browse to the translation overview for your language, and select the first item in the \"Files\" menu:" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:343 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:347 msgid "Once you are done with a series of edits, use the \"Upload translation\" item in that same menu and select your file. Choose \"Add as translation\" for the file upload mode." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:349 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:353 msgid "If a significant amount of time has passed between your download of the PO file and the upload of the edited version, there is a risk to overwrite the translations authored by other contributors in the meantime. This is why we advise to use the online interface so that you always work on the latest version." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:355 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:359 msgid "If you want to test changes locally (especially for the editor translation), you can use the downloaded PO file and :ref:`compile Godot from source `." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:358 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:362 msgid "Rename the editor translation PO file to ``.po`` (e.g. ``eo.po`` for Esperanto) and place it in the ``editor/translations/`` folder (`GitHub `__)." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:362 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:366 msgid "You can also test class reference changes the same way by renaming the PO file similarly and placing it in the ``doc/translations/`` folder (`GitHub `__)." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:367 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:371 msgid "Localizing documentation images" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:369 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:373 msgid "The online documentation includes many images, which can be screenshots of the Godot editor, custom-made graphs, of any other kind of visual content. Some of it includes text and might thus be relevant to localize in your language." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:373 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:377 msgid "This part is not handled via Weblate, but directly on the `godot-docs-l10n `_ Git repository where the documentation translations are synced from Weblate." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:379 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:383 msgid "The workflow is not the most straightforward and requires some knowledge of Git. We plan to work on a simplified Web tool which could be used to manage image localization in a convenient way, abstracting away these steps." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:383 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:387 msgid "To translate an image, you should first locate it in the original English documentation. To do so, browse the relevant page in the docs, e.g. :ref:`doc_intro_to_the_editor_interface`. Click the \"Edit on GitHub\" link in the top right corner:" msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:390 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:394 msgid "On GitHub, click on the image you want to translate. If relevant, click on \"Download\" to download it locally and edit it with an image edition tool. Note the full path to the image as it will be needed further down (here ``getting_started/step_by_step/img/project_manager_first_open.png``)." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:397 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:401 msgid "Create your localized version of the image, either by editing the English one, or by taking a screenshot of the editor with your language, if it's an editor screenshot. Some images may also have source files available in SVG format, so you can browse the ``img/`` folder which contains them to check for that." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:402 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:406 msgid "Name your localized image like the original one, but with the language code added before the extension, e.g. ``project_manager_first_open.png`` would become ``project_manager_first_open.fr.png`` for the French localization." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:406 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:410 msgid "Finally, on godot-docs-l10n_, recreate the same folder structure as for the original image in the ``images`` subfolder (`GitHub `_), and place your translated image there. In our example, the end result should be ``images/getting_started/step_by_step/img/project_manager_first_open.fr.png``." msgstr "" -#: ../../docs/community/contributing/editor_and_docs_localization.rst:412 +#: ../../docs/community/contributing/editor_and_docs_localization.rst:416 msgid "Repeat this for other images and :ref:`make a Pull Request `." msgstr "" diff --git a/sphinx/templates/community/contributing/index.pot b/sphinx/templates/community/contributing/index.pot index 26f82dead6..154e0a9c0d 100644 --- a/sphinx/templates/community/contributing/index.pot +++ b/sphinx/templates/community/contributing/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,3 +19,79 @@ msgstr "" #: ../../docs/community/contributing/index.rst:2 msgid "Contributing" msgstr "" + +#: ../../docs/community/contributing/index.rst:4 +msgid "Everyone is most welcome to contribute to Godot. Here are some ways in which you can contribute to the project:" +msgstr "" + +#: ../../docs/community/contributing/index.rst:7 +msgid "Improving the engine by fixing bugs, coding new features, or refining existing ones." +msgstr "" + +#: ../../docs/community/contributing/index.rst:8 +msgid "Writing or proofreading documentation. You can contribute both to this reference manual or the code reference." +msgstr "" + +#: ../../docs/community/contributing/index.rst:10 +msgid "Translating the editor or documentation from English to other languages." +msgstr "" + +#: ../../docs/community/contributing/index.rst:11 +msgid "Reporting issues or `writing detailed proposals `__." +msgstr "" + +#: ../../docs/community/contributing/index.rst:15 +msgid "Getting started" +msgstr "" + +#: ../../docs/community/contributing/index.rst:17 +msgid "You would like to contribute but you don't know how or what to do? You can get answers below." +msgstr "" + +#: ../../docs/community/contributing/index.rst:29 +msgid "Contributing to the engine" +msgstr "" + +#: ../../docs/community/contributing/index.rst:31 +msgid "The guides below explain how to contribute to the engine's core. You will learn about the code style, the contribution workflow, and more." +msgstr "" + +#: ../../docs/community/contributing/index.rst:49 +msgid "Writing documentation" +msgstr "" + +#: ../../docs/community/contributing/index.rst:51 +msgid "We always need help to improve the documentation, be it the class reference or the manual. Below, you can find our content and writing guidelines and concrete guides to make changes to the documentation." +msgstr "" + +#: ../../docs/community/contributing/index.rst:56 +msgid "Guidelines" +msgstr "" + +#: ../../docs/community/contributing/index.rst:58 +msgid "Here are the principles and guidelines we strive to follow to write accessible documentation." +msgstr "" + +#: ../../docs/community/contributing/index.rst:70 +msgid "Writing the manual" +msgstr "" + +#: ../../docs/community/contributing/index.rst:80 +msgid "Class reference guides" +msgstr "" + +#: ../../docs/community/contributing/index.rst:82 +msgid "The pages below focus on the class reference." +msgstr "" + +#: ../../docs/community/contributing/index.rst:84 +msgid "As the reference is included in the Godot editor, its source files are part of the `godot repository `_. We use XML files to write it, so the process to contribute to the class reference differs from writing the online manual." +msgstr "" + +#: ../../docs/community/contributing/index.rst:99 +msgid "Translating the documentation" +msgstr "" + +#: ../../docs/community/contributing/index.rst:101 +msgid "The community is always working hard on making Godot and its documentation available to more people. Localizing the documentation is a colossal and ongoing effort you can be part of." +msgstr "" diff --git a/sphinx/templates/community/contributing/pr_workflow.pot b/sphinx/templates/community/contributing/pr_workflow.pot index dc2d87774d..6b2479751e 100644 --- a/sphinx/templates/community/contributing/pr_workflow.pot +++ b/sphinx/templates/community/contributing/pr_workflow.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,345 +49,345 @@ msgid "The Git version control system is the tool used to keep track of successi msgstr "" #: ../../docs/community/contributing/pr_workflow.rst:46 -msgid "The first sections of Git's \"Book\" are a good introduction to the tool's philosophy and the various commands you need to master in your daily workflow. You can read them online on the `Git SCM `_ website." +msgid "The first sections of Git's \"Book\" are a good introduction to the tool's philosophy and the various commands you need to master in your daily workflow. You can read them online on the `Git SCM `_ website. You can also try out `GitHub's interactive guide `__." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:51 +#: ../../docs/community/contributing/pr_workflow.rst:52 msgid "The branches on the Git repository are organized as follows:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:53 +#: ../../docs/community/contributing/pr_workflow.rst:54 msgid "The ``master`` branch is where the development of the next major version occurs. As a development branch, it can be unstable and is not meant for use in production. This is where PRs should be done in priority." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:57 +#: ../../docs/community/contributing/pr_workflow.rst:58 msgid "The stable branches are named after their version, e.g. ``3.1`` and ``2.1``. They are used to backport bugfixes and enhancements from the ``master`` branch to the currently maintained stable release (e.g. 3.1.2 or 2.1.6). As a rule of thumb, the last stable branch is maintained until the next major version (e.g. the ``3.0`` branch was maintained until the release of Godot 3.1). If you want to make PRs against a maintained stable branch, please check first if your changes are also relevant for the ``master`` branch, and if so make the PR for the ``master`` branch in priority. Release managers can then cherry-pick the fix to a stable branch if relevant." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:67 +#: ../../docs/community/contributing/pr_workflow.rst:68 msgid "There might occasionally be feature branches, usually meant to be merged into the ``master`` branch at some time." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:71 +#: ../../docs/community/contributing/pr_workflow.rst:72 msgid "Forking and cloning" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:73 +#: ../../docs/community/contributing/pr_workflow.rst:74 msgid "The first step is to *fork* the `godotengine/godot `_ repository on GitHub. To do so, you will need to have a GitHub account and to be logged in. In the top right corner of the repository's GitHub page, you should see the \"Fork\" button as shown below:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:80 +#: ../../docs/community/contributing/pr_workflow.rst:81 msgid "Click it, and after a while you should be redirected to your own fork of the Godot repo, with your GitHub username as namespace:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:85 +#: ../../docs/community/contributing/pr_workflow.rst:86 msgid "You can then *clone* your fork, i.e. create a local copy of the online repository (in Git speak, the *origin remote*). If you haven't already, download Git from `its website `_ if you're using Windows or macOS, or install it through your package manager if you're using Linux." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:90 +#: ../../docs/community/contributing/pr_workflow.rst:91 msgid "If you are on Windows, open Git Bash to type commands. macOS and Linux users can use their respective terminals." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:93 +#: ../../docs/community/contributing/pr_workflow.rst:94 msgid "To clone your fork from GitHub, use the following command:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:99 +#: ../../docs/community/contributing/pr_workflow.rst:100 msgid "In our examples, the \"$\" character denotes the command line prompt on typical UNIX shells. It is not part of the command and should not be typed." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:103 +#: ../../docs/community/contributing/pr_workflow.rst:104 msgid "After a little while, you should have a ``godot`` directory in your current working directory. Move into it using the ``cd`` command:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:110 +#: ../../docs/community/contributing/pr_workflow.rst:111 msgid "We will start by setting up a reference to the original repository that we forked:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:117 +#: ../../docs/community/contributing/pr_workflow.rst:118 msgid "This will create a reference named ``upstream`` pointing to the original ``godotengine/godot`` repository. This will be useful when you want to pull new commits from its ``master`` branch to update your fork. You have another remote reference named ``origin``, which points to your fork (``USERNAME/godot``)." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:122 +#: ../../docs/community/contributing/pr_workflow.rst:123 msgid "You only need to do the above steps once, as long as you keep that local ``godot`` folder (which you can move around if you want, the relevant metadata is hidden in its ``.git`` subfolder)." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:126 +#: ../../docs/community/contributing/pr_workflow.rst:127 msgid "*Branch it, pull it, code it, stage it, commit, push it, rebase it... technologic.*" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:129 +#: ../../docs/community/contributing/pr_workflow.rst:130 msgid "This bad take on Daft Punk's *Technologic* shows the general conception Git beginners have of its workflow: lots of strange commands to learn by copy and paste, hoping they will work as expected. And that's actually not a bad way to learn, as long as you're curious and don't hesitate to question your search engine when lost, so we will give you the basic commands to know when working in Git." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:137 +#: ../../docs/community/contributing/pr_workflow.rst:138 msgid "In the following, we will assume as an example that you want to implement a feature in Godot's project manager, which is coded in the ``editor/project_manager.cpp`` file." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:142 +#: ../../docs/community/contributing/pr_workflow.rst:143 msgid "Branching" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:144 +#: ../../docs/community/contributing/pr_workflow.rst:145 msgid "By default, the ``git clone`` should have put you on the ``master`` branch of your fork (``origin``). To start your own feature development, we will create a feature branch:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:156 +#: ../../docs/community/contributing/pr_workflow.rst:157 msgid "This command is equivalent:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:163 +#: ../../docs/community/contributing/pr_workflow.rst:164 msgid "If you want to go back to the ``master`` branch, you'd use:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:169 +#: ../../docs/community/contributing/pr_workflow.rst:170 msgid "You can see which branch you are currently on with the ``git branch`` command:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:179 +#: ../../docs/community/contributing/pr_workflow.rst:180 msgid "Be sure to always go back to the ``master`` branch before creating a new branch, as your current branch will be used as the base for the new one. Alternatively, you can specify a custom base branch after the new branch's name:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:188 +#: ../../docs/community/contributing/pr_workflow.rst:189 msgid "Updating your branch" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:190 +#: ../../docs/community/contributing/pr_workflow.rst:191 msgid "This would not be needed the first time (just after you forked the upstream repository). However, the next time you want to work on something, you will notice that your fork's ``master`` is several commits behind the upstream ``master`` branch: pull requests from other contributors would have been merged in the meantime." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:196 +#: ../../docs/community/contributing/pr_workflow.rst:197 msgid "To ensure there won't be conflicts between the feature you develop and the current upstream ``master`` branch, you will have to update your branch by *pulling* the upstream branch." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:204 +#: ../../docs/community/contributing/pr_workflow.rst:205 msgid "The ``--rebase`` argument will ensure that any local changes that you committed will be re-applied *on top* of the pulled branch, which is usually what we want in our PR workflow. This way, when you open a pull request, your own commits will be the only difference with the upstream ``master`` branch." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:209 +#: ../../docs/community/contributing/pr_workflow.rst:210 msgid "While rebasing, conflicts may arise if your commits modified code that has been changed in the upstream branch in the meantime. If that happens, Git will stop at the conflicting commit and will ask you to resolve the conflicts. You can do so with any text editor, then stage the changes (more on that later), and proceed with ``git rebase --continue``. Repeat the operation if later commits have conflicts too, until the rebase operation completes." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:216 +#: ../../docs/community/contributing/pr_workflow.rst:217 msgid "If you're unsure about what is going on during a rebase and you panic (no worry, we all do the first few times), you can abort the rebase with ``git rebase --abort``. You will then be back to the original state of your branch before calling ``git pull --rebase``." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:221 +#: ../../docs/community/contributing/pr_workflow.rst:222 msgid "If you omit the ``--rebase`` argument, you will instead create a merge commit which tells Git what to make of the two distinct branches. If any conflicts arise, they would be resolved all at once via this merge commit." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:225 +#: ../../docs/community/contributing/pr_workflow.rst:226 msgid "While this is a valid workflow and the default behavior of ``git pull``, merge commits within PRs are frowned upon in our PR workflow. We only use them when merging PRs into the upstream branch." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:229 +#: ../../docs/community/contributing/pr_workflow.rst:230 msgid "The philosophy is that a PR should represent the final stage of the changes made to the codebase, and we are not interested in mistakes and fixes that would have been done in intermediate stages before merging. Git gives us great tools to \"rewrite the history\" and make it as if we got things right the first time, and we're happy to use it to ensure that changes are easy to review and understand long after they have been merged." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:236 +#: ../../docs/community/contributing/pr_workflow.rst:237 msgid "If you have already created a merge commit without using ``rebase``, or have made any other changes that have resulted in undesired history, the best option is to use an *interactive rebase* on the upstream branch. See the :ref:`dedicated section ` for instructions." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:241 +#: ../../docs/community/contributing/pr_workflow.rst:242 msgid "If at any time you want to *reset* a local branch to a given commit or branch, you can do so with ``git reset --hard `` or ``git reset --hard /`` (e.g. ``git reset --hard upstream/master``)." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:245 +#: ../../docs/community/contributing/pr_workflow.rst:246 msgid "Be warned that this will remove any changes that you might have committed in this branch. If you ever lose commits by mistake, use the ``git reflog`` command to find the commit ID of the previous state that you would like to restore, and use it as argument of ``git reset --hard`` to go back to that state." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:251 +#: ../../docs/community/contributing/pr_workflow.rst:252 msgid "Making changes" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:253 +#: ../../docs/community/contributing/pr_workflow.rst:254 msgid "You would then do your changes to our example's ``editor/project_manager.cpp`` file with your usual development environment (text editor, IDE, etc.)." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:257 +#: ../../docs/community/contributing/pr_workflow.rst:258 msgid "By default, those changes are *unstaged*. The staging area is a layer between your working directory (where you make your modifications) and the local Git repository (the commits and all the metadata in the ``.git`` folder). To bring changes from the working directory to the Git repository, you need to *stage* them with the ``git add`` command, and then to commit them with the ``git commit`` command." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:264 +#: ../../docs/community/contributing/pr_workflow.rst:265 msgid "There are various commands you should know to review your current work, before staging it, while it is staged, and after it has been committed." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:267 +#: ../../docs/community/contributing/pr_workflow.rst:268 msgid "``git diff`` will show you the current unstaged changes, i.e. the differences between your working directory and the staging area." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:269 +#: ../../docs/community/contributing/pr_workflow.rst:270 msgid "``git checkout -- `` will undo the unstaged changes to the given files." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:271 +#: ../../docs/community/contributing/pr_workflow.rst:272 msgid "``git add `` will *stage* the changes on the listed files." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:272 +#: ../../docs/community/contributing/pr_workflow.rst:273 msgid "``git diff --staged`` will show the current staged changes, i.e. the differences between the staging area and the last commit." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:274 +#: ../../docs/community/contributing/pr_workflow.rst:275 msgid "``git reset HEAD `` will *unstage* changes to the listed files." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:275 +#: ../../docs/community/contributing/pr_workflow.rst:276 msgid "``git status`` will show you what are the currently staged and unstaged modifications." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:277 +#: ../../docs/community/contributing/pr_workflow.rst:278 msgid "``git commit`` will commit the staged files. It will open a text editor (you can define the one you want to use with the ``GIT_EDITOR`` environment variable or the ``core.editor`` setting in your Git configuration) to let you write a commit log. You can use ``git commit -m \"Cool commit log\"`` to write the log directly." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:282 +#: ../../docs/community/contributing/pr_workflow.rst:283 msgid "``git commit --amend`` lets you amend the last commit with your currently staged changes (added with ``git add``). This is the best option if you want to fix a mistake in the last commit (bug, typo, style issue, etc.)." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:285 +#: ../../docs/community/contributing/pr_workflow.rst:286 msgid "``git log`` will show you the last commits of your current branch. If you did local commits, they should be shown at the top." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:287 +#: ../../docs/community/contributing/pr_workflow.rst:288 msgid "``git show`` will show you the changes of the last commit. You can also specify a commit hash to see the changes for that commit." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:290 +#: ../../docs/community/contributing/pr_workflow.rst:291 msgid "That's a lot to memorize! Don't worry, just check this cheat sheet when you need to make changes, and learn by doing." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:293 +#: ../../docs/community/contributing/pr_workflow.rst:294 msgid "Here's how the shell history could look like on our example:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:325 +#: ../../docs/community/contributing/pr_workflow.rst:326 msgid "With this, we should have two new commits in our ``better-project-manager`` branch which were not in the ``master`` branch. They are still only local though, the remote fork does not know about them, nor does the upstream repo." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:330 +#: ../../docs/community/contributing/pr_workflow.rst:331 msgid "Pushing changes to a remote" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:332 +#: ../../docs/community/contributing/pr_workflow.rst:333 msgid "That's where ``git push`` will come into play. In Git, a commit is always done in the local repository (unlike Subversion where a commit will modify the remote repository directly). You need to *push* the new commits to a remote branch to share them with the world. The syntax for this is:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:341 +#: ../../docs/community/contributing/pr_workflow.rst:342 msgid "The part about the remote branch can be omitted if you want it to have the same name as the local branch, which is our case in this example, so we will do:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:349 +#: ../../docs/community/contributing/pr_workflow.rst:350 msgid "Git will ask you for your username and password, and the changes will be sent to your remote. If you check the fork's page on GitHub, you should see a new branch with your added commits." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:354 +#: ../../docs/community/contributing/pr_workflow.rst:355 msgid "Issuing a pull request" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:356 +#: ../../docs/community/contributing/pr_workflow.rst:357 msgid "When you load your fork's branch on GitHub, you should see a line saying *\"This branch is 2 commits ahead of godotengine:master.\"* (and potentially some commits behind, if your ``master`` branch was out of sync with the upstream ``master`` branch)." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:363 -msgid "On that line, there is a \"Pull request\" link. Clicking it will open a form that will let you issue a pull request on the ``godotengine/godot`` upstream repository. It should show you your two commits, and state \"Able to merge\". If not (e.g. it has way more commits, or says there are merge conflicts), don't create the PR, something went wrong. Go to IRC and ask for support :)" +#: ../../docs/community/contributing/pr_workflow.rst:364 +msgid "On that line, there is a \"Pull request\" link. Clicking it will open a form that will let you issue a pull request on the ``godotengine/godot`` upstream repository. It should show you your two commits, and state \"Able to merge\". If not (e.g. it has way more commits, or says there are merge conflicts), don't create the PR yet, something went wrong. Go to our `Contributors Chat `_ and ask for support :)" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:369 +#: ../../docs/community/contributing/pr_workflow.rst:371 msgid "Use an explicit title for the PR and put the necessary details in the comment area. You can drag and drop screenshots, GIFs or zipped projects if relevant, to showcase what your work implements. Click \"Create a pull request\", and tadaa!" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:375 +#: ../../docs/community/contributing/pr_workflow.rst:377 msgid "Modifying a pull request" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:377 +#: ../../docs/community/contributing/pr_workflow.rst:379 msgid "While it is reviewed by other contributors, you will often need to make changes to your yet-unmerged PR, either because contributors requested them, or because you found issues yourself while testing." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:381 +#: ../../docs/community/contributing/pr_workflow.rst:383 msgid "The good news is that you can modify a pull request simply by acting on the branch you made the pull request from. You can e.g. make a new commit on that branch, push it to your fork, and the PR will be updated automatically:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:396 +#: ../../docs/community/contributing/pr_workflow.rst:398 msgid "However, be aware that in our PR workflow, we favor commits that bring the codebase from one functional state to another functional state, without having intermediate commits fixing up bugs in your own code or style issues. Most of the time, we will prefer a single commit in a given PR (unless there's a good reason to keep the changes separate), so instead of authoring a new commit, considering using ``git commit --amend`` to amend the previous commit with your fixes. The above example would then become:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:426 +#: ../../docs/community/contributing/pr_workflow.rst:428 msgid "The interactive rebase" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:428 +#: ../../docs/community/contributing/pr_workflow.rst:430 msgid "If you didn't follow the above steps closely to *amend* changes into a commit instead of creating fixup commits, or if you authored your changes without being aware of our workflow and Git usage tips, reviewers might request of your to *rebase* your branch to *squash* some or all of the commits into one." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:433 +#: ../../docs/community/contributing/pr_workflow.rst:435 msgid "Indeed, if some commits have been made following reviews to fix bugs, typos, etc. in the original commit, they are not relevant to a future changelog reader who would want to know what happened in the Godot codebase, or when and how a given file was last modified." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:438 +#: ../../docs/community/contributing/pr_workflow.rst:440 msgid "To squash those extraneous commits into the main one, we will have to *rewrite history*. Right, we have that power. You may read that it's a bad practice, and it's true when it comes to branches of the upstream repo. But in your fork, you can do whatever you want, and everything is allowed to get neat PRs :)" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:443 +#: ../../docs/community/contributing/pr_workflow.rst:445 msgid "We will use the *interactive rebase* ``git rebase -i`` to do this. This command takes a commit ID or a branch name as argument, and will let you modify all commits between that commit/branch and the last one in your working branch, the so-called ``HEAD``." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:448 +#: ../../docs/community/contributing/pr_workflow.rst:450 msgid "While you can give any commit ID to ``git rebase -i`` and review everything in between, the most common and convenient workflow involves rebasing on the *upstream ``master`` branch*, which you can do with:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:456 +#: ../../docs/community/contributing/pr_workflow.rst:458 msgid "Referencing branches in Git is a bit tricky due to the distinction between remote and local branches. Here, ``upstream/master`` (with a `/`) is a local branch which has been pulled from the ``upstream`` remote's ``master`` branch." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:461 +#: ../../docs/community/contributing/pr_workflow.rst:463 msgid "Interactive rebases can only be done on local branches, so the `/` is important here. As the upstream remote changes frequently, your local ``upstream/master`` branch may become outdated, so you can update it with ``git fetch upstream master``. Contrarily to ``git pull --rebase upstream master`` which would update your currently checked out branch, ``fetch`` will only update the ``upstream/master`` reference (which is distinct from your local ``master`` branch... yes it's confusing, but you'll become familiar with this little by little)." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:471 -msgid "This will open a text editor (``vi`` by default, see `Git docs __` to configure your favorite one) with something which may look like this:" +#: ../../docs/community/contributing/pr_workflow.rst:473 +msgid "This will open a text editor (``vi`` by default, see `Git docs `_ to configure your favorite one) with something which may look like this:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:480 +#: ../../docs/community/contributing/pr_workflow.rst:482 msgid "The editor will also show instructions regarding how you can act on those commits. In particular, it should tell you that \"pick\" means to use that commit (do nothing), and that \"squash\" and \"fixup\" can be used to *meld* the commit in its parent commit. The difference between \"squash\" and \"fixup\" is that \"fixup\" will discard the commit log from the squashed commit. In our example, we are not interested in keeping the log of the \"Fix a typo\" commit, so we use:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:493 +#: ../../docs/community/contributing/pr_workflow.rst:495 msgid "Upon saving and quitting the editor, the rebase will occur. The second commit will be melded into the first one, and ``git log`` and ``git show`` should now confirm that you have only one commit with the changes from both previous commits." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:498 +#: ../../docs/community/contributing/pr_workflow.rst:500 msgid "But! You rewrote the history, and now your local and remote branches have diverged. Indeed, commit 1b4aad7 in the above example will have changed, and therefore got a new commit hash. If you try to push to your remote branch, it will raise an error:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:512 +#: ../../docs/community/contributing/pr_workflow.rst:514 msgid "This is a sane behavior, Git will not let you push changes that would override remote content. But that's actually what we want to do here, so we will have to *force* it:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:520 +#: ../../docs/community/contributing/pr_workflow.rst:522 msgid "And tadaa! Git will happily *replace* your remote branch with what you had locally (so make sure that's what you wanted, using ``git log``). This will also update the PR accordingly." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:525 +#: ../../docs/community/contributing/pr_workflow.rst:527 msgid "Deleting a Git branch" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:527 +#: ../../docs/community/contributing/pr_workflow.rst:529 msgid "After your pull request gets merged, there's one last thing you should do: delete your Git branch for the PR. There won't be issues if you don't delete your branch, but it's good practice to do so. You'll need to do this twice, once for the local branch and another for the remote branch on GitHub." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:532 +#: ../../docs/community/contributing/pr_workflow.rst:534 msgid "To delete our better project manager branch locally, use this command:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:538 +#: ../../docs/community/contributing/pr_workflow.rst:540 msgid "Alternatively, if the branch hadn't been merged yet and we wanted to delete it anyway, instead of ``-d`` you would use ``-D``." msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:541 +#: ../../docs/community/contributing/pr_workflow.rst:543 msgid "Next, to delete the remote branch on GitHub use this command:" msgstr "" -#: ../../docs/community/contributing/pr_workflow.rst:547 +#: ../../docs/community/contributing/pr_workflow.rst:549 msgid "You can also delete the remote branch from the GitHub PR itself, a button should appear once it has been merged or closed." msgstr "" diff --git a/sphinx/templates/community/contributing/testing_pull_requests.pot b/sphinx/templates/community/contributing/testing_pull_requests.pot index f0653825e1..3cdb64a178 100644 --- a/sphinx/templates/community/contributing/testing_pull_requests.pot +++ b/sphinx/templates/community/contributing/testing_pull_requests.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/community/contributing/updating_the_class_reference.pot b/sphinx/templates/community/contributing/updating_the_class_reference.pot index 9b9763ed9b..8eaac67e2e 100644 --- a/sphinx/templates/community/contributing/updating_the_class_reference.pot +++ b/sphinx/templates/community/contributing/updating_the_class_reference.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,505 +21,73 @@ msgid "Contributing to the class reference" msgstr "" #: ../../docs/community/contributing/updating_the_class_reference.rst:8 -msgid "This guide also is available as a `video tutorial on YouTube `_." +msgid "The class reference is available online in the :ref:`classes ` section of the documentation and in the Godot editor, from the help menu." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:10 -msgid "Godot ships with many nodes and singletons to help you develop your games. Each is a class, documented in the :ref:`class reference `. This reference is essential for anyone learning the engine: it is available both online and in the engine." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:13 -msgid "But it's incomplete. Some methods, variables and signals lack descriptions. Others changed with recent releases and need updates. The developers can't write the entire reference on their own. Godot needs you, and all of us, to contribute." +#: ../../docs/community/contributing/updating_the_class_reference.rst:11 +msgid "In the class reference, some methods, variables, and signals lack descriptions. Others changed with recent releases and need updates. The developers can't write the entire reference on their own. Godot needs you, and all of us, to contribute." msgstr "" #: ../../docs/community/contributing/updating_the_class_reference.rst:16 -msgid "**Important:** If you are planning to make larger changes or a more substantial contribution, it is usually a good idea to create an issue (or a comment in an existing one) to let others know so they don't start working on the same thing too." +msgid "**Important:** If you plan to make large changes, you should create an issue on the `godot-docs repository `_ or comment on an existing issue. Doing so lets others know you're already taking care of a given class." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:21 -msgid "Not sure where to start contributing? Take a look at the current class reference completion status `here `__." +#: ../../docs/community/contributing/updating_the_class_reference.rst:23 +msgid "You can find the writing guidelines for the class reference :ref:`here `." msgstr "" #: ../../docs/community/contributing/updating_the_class_reference.rst:25 -msgid "How to contribute" +msgid "For details on Git usage and the pull request workflow, please refer to the :ref:`doc_pr_workflow` page." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:27 -msgid "The class reference lies in the following XML files, in Godot's GitHub repository: `doc/classes/ `_." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:29 -msgid "There are 5 steps to update the class reference (full guide below):" +#: ../../docs/community/contributing/updating_the_class_reference.rst:28 +msgid "If you want to translate the class reference from English to another language, see :ref:`doc_editor_and_docs_localization`." msgstr "" #: ../../docs/community/contributing/updating_the_class_reference.rst:31 -msgid "Fork `Godot's repository `_" +msgid "This guide is also available as a `video tutorial on YouTube `_." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:32 -msgid "Clone your fork on your computer" +#: ../../docs/community/contributing/updating_the_class_reference.rst:36 +msgid "Not sure which class to contribute to? Take a look at the class reference's completion status `here `_." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:33 -msgid "Edit the class file in ``doc/classes/`` to write documentation" +#: ../../docs/community/contributing/updating_the_class_reference.rst:39 +msgid "You can find the source files for the class reference in Godot's GitHub repository: `doc/classes/ `_." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:34 -msgid "Commit your changes and push them to your fork" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:35 -msgid "Make a pull request on the Godot repository" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:37 -msgid "Always use these XML files to edit the API reference. Do not edit the generated .rst files :ref:`in the online documentation `, hosted in the `godot-docs `_ repository." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:40 -msgid "Get started with GitHub" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:42 -msgid "If you're new to Git and GitHub, this guide will help you get started. You'll learn to:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:44 -msgid "Fork and clone Godot's repository" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:45 -msgid "Keep your fork up to date with other contributors" +#: ../../docs/community/contributing/updating_the_class_reference.rst:43 +msgid "For some modules in the engine's source code, you'll find the XML files in the ``modules//doc_classes/`` directory instead." msgstr "" #: ../../docs/community/contributing/updating_the_class_reference.rst:46 -msgid "Create a pull request so your improvements end in the official docs" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:48 -msgid "If you're new to Git, the version control system Godot uses, go through `GitHub's interactive guide `_. You'll learn some essential vocabulary and get a sense for the tool." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:51 -msgid "Fork Godot" +msgid "Always edit the API reference through these source XML files. Do not edit the generated ``.rst`` files :ref:`in the online documentation `, hosted in the `godot-docs `_ repository." msgstr "" #: ../../docs/community/contributing/updating_the_class_reference.rst:53 -msgid "Fork the Godot Engine into a GitHub repository of your own." +msgid "Unless you make minor changes, like fixing a typo, we do not recommend using the GitHub web editor to edit the class reference's XML." msgstr "" #: ../../docs/community/contributing/updating_the_class_reference.rst:55 -msgid "Clone the repository on your computer:" +msgid "It lacks features to edit XML well, like keeping indentations consistent, and it does not allow amending commits based on reviews." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:61 -msgid "Create a new branch to make your changes. It makes it a lot easier to sync your improvements with other docs writers. It's also easier to clean up your repository if you run into any issues with Git." +#: ../../docs/community/contributing/updating_the_class_reference.rst:57 +msgid "Also, it doesn't allow you to test your changes in the engine or with validation scripts as described in :ref:`doc_class_reference_writing_guidelines_editing_xml`." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:67 -msgid "The new branch is the same as your master branch, until you start to write API docs. In the ``doc/`` folder, you'll find the class reference." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:70 -msgid "How to keep your local clone up-to-date" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:72 -msgid "Other writers contribute to Godot's documentation. Your local repository will fall behind it, and you'll have to synchronize it. Especially if other contributors update the class reference while you work on it." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:74 -msgid "First add an ``upstream`` git *remote* to work with. Remotes are links to online repositories you can download new files from." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:80 -msgid "You can check the list of all remote servers with:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:86 -msgid "You should have two: ``origin``, your fork on GitHub that Git adds by default, and ``upstream``, that you just added:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:96 -msgid "Each time you want to sync your branch to the state of the upstream repository, enter:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:102 -msgid "This command will first ``fetch``, or download the latest version of the Godot repository. Then, it will reapply your local changes on top." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:104 -msgid "If you made changes you don't want to keep in your local branch, use the following commands instead:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:111 -msgid "**Warning:** The above command will reset your branch to the state of the ``upstream master`` branch. It will discard all local changes. Make sure to only run this *before* you make important changes." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:113 -msgid "Another option is to delete the branch you're working on, synchronize the master branch with the Godot repository, and create a new branch:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:122 -msgid "If you're feeling lost by now, come to our `IRC channels `_ and ask for help. Experienced Git users will give you a hand." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:125 +#: ../../docs/community/contributing/updating_the_class_reference.rst:62 msgid "Updating the documentation template" msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:127 -msgid "When classes are modified in the source code, the documentation template might become outdated. To make sure that you are editing an up-to-date version, you first need to compile Godot (you can follow the :ref:`doc_introduction_to_the_buildsystem` page), and then run the following command (assuming 64-bit Linux):" +#: ../../docs/community/contributing/updating_the_class_reference.rst:64 +msgid "When you create a new class or modify the engine's API, you need to re-generate the XML files in ``doc/classes/``." msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:133 -msgid "The XML files in doc/classes should then be up-to-date with current Godot Engine features. You can then check what changed using the ``git diff`` command. If there are changes to other classes than the one you are planning to document, please commit those changes first before starting to edit the template:" +#: ../../docs/community/contributing/updating_the_class_reference.rst:66 +msgid "To do so, you first need to compile Godot. See the :ref:`doc_introduction_to_the_buildsystem` page to learn how. Then, execute the compiled Godot binary from the Godot root directory with the ``--doctool`` option. For example, if you're on 64-bit Linux, the command is::" msgstr "" -#: ../../docs/community/contributing/updating_the_class_reference.rst:140 -msgid "You are now ready to edit this file to add stuff." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:142 -msgid "**Note:** If this has been done recently by another contributor, you don't forcefully need to go through these steps (unless you know that the class you plan to edit *has* been modified recently)." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:145 -msgid "Push and request a pull of your changes" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:147 -msgid "Once your modifications are finished, push your changes on your GitHub repository:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:156 -msgid "When it's done, you can ask for a Pull Request via the GitHub UI of your Godot fork." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:160 -msgid "Although you can edit files on GitHub, it's not recommended. As hundreds of contributors work on Godot, the Git history must stay clean. Each commit should bundle all related improvements you make to the class reference, a new feature, bug fixes... When you edit from GitHub, it will create a new branch and a Pull Request every time you want to save it. If a few days pass before your changes get a review, you won't be able to update to the latest version of the repository cleanly. Also, it's harder to keep clean indents from GitHub. And they're very important in the docs." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:162 -msgid "TL;DR: If you don't know what you're doing exactly, do not edit files from GitHub." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:165 -msgid "How to edit class XML" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:167 -msgid "Edit the file for your chosen class in ``doc/classes/`` to update the class reference. The folder contains an XML file for each class. The XML lists the constants and methods you'll find in the class reference. Godot generates and updates the XML automatically." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:169 -msgid "Edit it using your favorite text editor. If you use a code editor, make sure that it doesn't change the indent style: tabs for the XML, and 4 spaces inside BBCode-style blocks. More on that below." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:171 -msgid "If you need to check that the modifications you've made are correct in the generated documentation, build Godot as described :ref:`here `, run the editor and open the help for the page you modified." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:174 -msgid "How to write the class reference" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:176 -msgid "Each class has a brief and a long description. The brief description is always at the top of the page, while the full description lies below the list of methods, variables and constants. Methods, member variables, constants and signals are in separate categories or XML nodes. For each, learn how they work in Godot's source code, and fill their ." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:178 -msgid "Our job is to add the missing text between these marks:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:180 -msgid "" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:181 -msgid "" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:182 -msgid "" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:183 -msgid "" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:184 -msgid "" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:185 -msgid "" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:187 -msgid "Write in a clear and simple language. Always follow the :ref:`writing guidelines ` to keep your descriptions short and easy to read. **Do not leave empty lines** in the descriptions: each line in the XML file will result in a new paragraph." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:189 -msgid "Here's how a class looks like in XML:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:228 -msgid "Use a code editor like Vim, Atom, Code, Notepad++ or anything similar to edit the file quickly. Use the search function to find classes fast." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:233 -msgid "Improve formatting with BBCode style tags" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:235 -msgid "Godot's class reference supports BBCode-like tags. They add nice formatting to the text. Here's the list of available tags:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:238 -msgid "Tag" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:238 -msgid "Effect" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:238 -msgid "Usage" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:238 -msgid "Result" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:240 -msgid "[Class]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:240 -msgid "Link a class" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:240 -msgid "Move the [Sprite]." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:240 -msgid "Move the :ref:`class_sprite`." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:242 -msgid "[method methodname]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:242 -msgid "Link to a method in this class" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:242 -msgid "Call [method hide]." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:242 -#: ../../docs/community/contributing/updating_the_class_reference.rst:244 -msgid "See :ref:`hide `." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:244 -msgid "[method Class.methodname]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:244 -msgid "Link to another class's method" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:244 -msgid "Call [method Spatial.hide]." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:246 -msgid "[member membername]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:246 -msgid "Link to a member in this class" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:246 -msgid "Get [member scale]." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:246 -#: ../../docs/community/contributing/updating_the_class_reference.rst:248 -msgid "Get :ref:`scale `." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:248 -msgid "[member Class.membername]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:248 -msgid "Link to another class's member" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:248 -msgid "Get [member Node2D.scale]." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:250 -msgid "[signal signalname]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:250 -msgid "Link to a signal in this class" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:250 -msgid "Emit [signal renamed]." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:250 -#: ../../docs/community/contributing/updating_the_class_reference.rst:252 -msgid "Emit :ref:`renamed `." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:252 -msgid "[signal Class.signalname]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:252 -msgid "Link to another class's signal" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:252 -msgid "Emit [signal Node.renamed]." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:254 -msgid "[b] [/b]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:254 -msgid "Bold" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:254 -msgid "Some [b]bold[/b] text." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:254 -msgid "Some **bold** text." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:256 -msgid "[i] [/i]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:256 -msgid "Italic" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:256 -msgid "Some [i]italic[/i] text." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:256 -msgid "Some *italic* text." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:258 -msgid "[code] [/code]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:258 -msgid "Monospace" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:258 -msgid "Some [code]monospace[/code] text." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:258 -msgid "Some ``monospace`` text." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:260 -msgid "[kbd] [/kbd]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:260 -msgid "Keyboard/mouse shortcut" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:260 -msgid "Some [kbd]Ctrl + C[/kbd] key." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:260 -msgid "Some :kbd:`Ctrl + C` key." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:262 -msgid "[codeblock] [/codeblock]" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:262 -msgid "Multiline preformatted block" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:262 -#: ../../docs/community/contributing/updating_the_class_reference.rst:262 -msgid "*See below.*" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:265 -msgid "Use ``[codeblock]`` for pre-formatted code blocks. Inside ``[codeblock]``, always use **four spaces** for indentation (the parser will delete tabs). Example:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:275 -msgid "Will display as:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:283 -msgid "To denote important information, add a paragraph starting with \"[b]Note:[/b]\" at the end of the description:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:290 -msgid "To denote crucial information that could cause security issues or loss of data if not followed carefully, add a paragraph starting with \"[b]Warning:[/b]\" at the end of the description:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:298 -msgid "For deprecated properties, add a paragraph starting with \"[i]Deprecated.[/i]\". Notice the use of italics instead of bold:" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:305 -msgid "In all the paragraphs described above, make sure the punctuation is part of the BBCode tags for consistency." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:309 -msgid "I don't know what this method does!" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:311 -msgid "No problem. Leave it behind, and list the methods you skipped when you request a pull of your changes. Another writer will take care of it." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:313 -msgid "You can still have a look at the methods' implementation in Godot's source code on GitHub. Also, if you have doubts, feel free to ask on the `Q&A website `__ and on IRC (freenode, #godotengine)." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:317 -msgid "Localization" -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:319 -msgid "The documentation can be translated in any language on `Hosted Weblate `__." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:322 -msgid "Translated strings are synced manually by documentation maintainers in the `godot-docs-l10n `__ repository." -msgstr "" - -#: ../../docs/community/contributing/updating_the_class_reference.rst:326 -msgid "Languages with a good level of completion have their own localized instances of ReadTheDocs. Open an issue on the ``godot-docs-l10n`` repository if you think that a new language is complete enough to get its own instance." +#: ../../docs/community/contributing/updating_the_class_reference.rst:73 +msgid "The XML files in doc/classes should then be up-to-date with current Godot Engine features. You can then check what changed using the ``git diff`` command. Please only include changes that are relevant to your work on the API in your commits. You can discard changes in other XML files using ``git checkout``." msgstr "" diff --git a/sphinx/templates/community/contributing/ways_to_contribute.pot b/sphinx/templates/community/contributing/ways_to_contribute.pot index f09494602d..115dee9f79 100644 --- a/sphinx/templates/community/contributing/ways_to_contribute.pot +++ b/sphinx/templates/community/contributing/ways_to_contribute.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,7 +29,7 @@ msgid "This means that to thrive, Godot needs as many users as possible to get i msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:16 -msgid "**Be part of the community.** The best way to contribute to Godot and help it become ever better is simply to use the engine and promote it by word-of-mouth, in the credits or splash screen of your games, blog posts, tutorials, videos, demos, gamedev or free software events, support on the Q&A, IRC, forums, Discord, etc. Participate! Being a user and advocate helps spread the word about our great engine, which has no marketing budget and can therefore only rely on its community to become more mainstream." +msgid "**Be part of the community.** The best way to contribute to Godot and help it become ever better is simply to use the engine and promote it by word-of-mouth, in the credits or splash screen of your games, blog posts, tutorials, videos, demos, gamedev or free software events, support on the Q&A, forums, Contributors Chat, Discord, etc. Participate! Being a user and advocate helps spread the word about our great engine, which has no marketing budget and can therefore only rely on its community to become more mainstream." msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:25 @@ -133,7 +133,7 @@ msgid "Filing an issue on GitHub" msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:145 -msgid "Godot uses `GitHub's issue tracker `_ for bug reports and enhancement suggestions. You will need a GitHub account to be able to open a new issue there, and click on the \"New issue\" button." +msgid "Godot uses `GitHub's issue tracker `_ for bug reports and enhancement suggestions. You will need a GitHub account to be able to open a new issue there, and click on the **New issue** button." msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:149 @@ -153,7 +153,7 @@ msgid "**Hardware.** Sometimes bugs are hardware-specific, i.e. they happen only msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:170 -msgid "**Godot version.** This is a must have. Some issues might be relevant in the current stable release, but fixed in the development branch, or the other way around. You might also be using an obsolete version of Godot and experiencing a known issue fixed in a later version, so knowing this from the start helps to speed up the diagnosis." +msgid "**Godot version.** This is a must-have. Some issues might be relevant in the current stable release, but fixed in the development branch, or the other way around. You might also be using an obsolete version of Godot and experiencing a known issue fixed in a later version, so knowing this from the start helps to speed up the diagnosis." msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:176 @@ -161,7 +161,7 @@ msgid "**How to reproduce the bug.** In the majority of cases, bugs are reproduc msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:187 -msgid "When you click the \"New issue\" button, you should be presented with a text area prefilled with our issue template. Please try to follow it so that all issues are consistent and provide the required information." +msgid "When you click the **New issue** button, you should be presented with a text area prefilled with our issue template. Please try to follow it so that all issues are consistent and provide the required information." msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:192 @@ -173,11 +173,11 @@ msgid "There are two separate resources referred to as \"documentation\" in Godo msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:196 -msgid "**The class reference.** This is the documentation for the complete Godot API as exposed to GDScript and the other scripting languages. It can be consulted offline, directly in Godot's code editor, or online at :ref:`Godot API `. To contribute to the class reference, you have to edit the `doc/base/classes.xml` in Godot's Git repository, and make a pull request. See :ref:`doc_updating_the_class_reference` for more details." +msgid "**The class reference.** This is the documentation for the complete Godot API as exposed to GDScript and the other scripting languages. It can be consulted offline, directly in Godot's code editor, or online at :ref:`Godot API `. To contribute to the class reference, you have to edit the XML file corresponding to the class and make a pull request. See :ref:`doc_updating_the_class_reference` and :ref:`doc_class_reference_writing_guidelines` for more details." msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:204 -msgid "**The tutorials and engine documentation and its translations.** This is the part you are reading now, which is distributed in the HTML, PDF and EPUB formats. Its contents are generated from plain text files in the reStructured Text (rst) format, to which you can contribute via pull requests on the `godot-docs `_ GitHub repository. See :ref:`doc_documentation_guidelines` for more details." +msgid "**The tutorials and engine documentation and its translations.** This is the part you are reading now, which is distributed in the HTML format. Its contents are generated from plain text files in the reStructured Text (rst) format, to which you can contribute via pull requests on the `godot-docs `_ GitHub repository. See :ref:`doc_contributing_to_the_documentation` for more details." msgstr "" #: ../../docs/community/contributing/ways_to_contribute.rst:212 diff --git a/sphinx/templates/community/tutorials.pot b/sphinx/templates/community/tutorials.pot index 656158403b..9cb54ac977 100644 --- a/sphinx/templates/community/tutorials.pot +++ b/sphinx/templates/community/tutorials.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -61,113 +61,125 @@ msgid "`Emilio `_ (2D, msgstr "" #: ../../docs/community/tutorials.rst:26 -msgid "`GDQuest `_ (2D and 3D, GDScript, VisualScript and C#)." +msgid "`FinePointCGI `_ (2D, 3D, GDScript and C#)." msgstr "" #: ../../docs/community/tutorials.rst:27 -msgid "`Game Development Center `_ (2D, networked multiplayer, GDScript)." +msgid "`GDQuest `_ (2D and 3D, GDScript, VisualScript and C#)." msgstr "" #: ../../docs/community/tutorials.rst:28 -msgid "`Game Endeavor `_ (2D, GDScript)." +msgid "`Game Development Center `_ (2D, networked multiplayer, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:29 -msgid "`Game from Scratch `_ (2D and 3D, GDScript and C#)." +msgid "`Game Endeavor `_ (2D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:30 -msgid "`HeartBeast `_ (2D, GDScript)." +msgid "`Game from Scratch `_ (2D and 3D, GDScript and C#)." msgstr "" #: ../../docs/community/tutorials.rst:31 -msgid "`KidsCanCode `__ (2D and 3D, GDScript and VisualScript)." +msgid "`HeartBeast `_ (2D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:32 -msgid "`Mister Taft Creates `_ (2D, GDScript)." +msgid "`KidsCanCode `__ (2D and 3D, GDScript and VisualScript)." msgstr "" #: ../../docs/community/tutorials.rst:33 -msgid "`Miziziziz `_ (2D and 3D, GDScript)." +msgid "`Mister Taft Creates `_ (2D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:34 -msgid "`P1X / Krzysztof Jankowski `_ (3D)." +msgid "`Miziziziz `_ (2D and 3D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:35 -msgid "`Pigdev `_ (2D, GDScript)." +msgid "`P1X / Krzysztof Jankowski `_ (3D)." msgstr "" #: ../../docs/community/tutorials.rst:36 -msgid "`Steincodes `__ (2D, GDScript and VisualScript)." +msgid "`Pigdev `_ (2D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:37 -msgid "`TheBuffED `_ (2D, GDScript)." +msgid "`Steincodes `__ (2D, GDScript and VisualScript)." msgstr "" #: ../../docs/community/tutorials.rst:38 -msgid "`Code with Tom `_ (2D and 3D, GDScript)." +msgid "`TheBuffED `_ (2D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:39 -msgid "`BornCG `_ (2D and 3D, GDScript)." +msgid "`Code with Tom `_ (2D and 3D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:40 -msgid "`Gonkee `_ (2D and 3D, GDScript, Shaders)." +msgid "`BornCG `_ (2D and 3D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:41 -msgid "`TheGuideKnight `_ (2D, GDScript)." +msgid "`Gonkee `_ (2D and 3D, GDScript, Shaders)." msgstr "" #: ../../docs/community/tutorials.rst:42 -msgid "`GDScript Dude `_ (GDScript)." +msgid "`TheGuideKnight `_ (2D, GDScript)." msgstr "" #: ../../docs/community/tutorials.rst:43 +msgid "`GDScript Dude `_ (GDScript)." +msgstr "" + +#: ../../docs/community/tutorials.rst:44 msgid "`Garbaj `_ (3D, GDScript)." msgstr "" -#: ../../docs/community/tutorials.rst:46 -msgid "Text tutorials" +#: ../../docs/community/tutorials.rst:45 +msgid "`Kasper Frandsen `_ (3D, Shaders)." msgstr "" #: ../../docs/community/tutorials.rst:48 -msgid "`GDScript website by Andrew Wilkes `__" -msgstr "" - -#: ../../docs/community/tutorials.rst:49 -msgid "`Godot Recipes by KidsCanCode `__" +msgid "Text tutorials" msgstr "" #: ../../docs/community/tutorials.rst:50 -msgid "`Steincodes `__" +msgid "`FinepointCGI website by Mitch `__" +msgstr "" + +#: ../../docs/community/tutorials.rst:51 +msgid "`GDScript website by Andrew Wilkes `__" +msgstr "" + +#: ../../docs/community/tutorials.rst:52 +msgid "`Godot Recipes by KidsCanCode `__" msgstr "" #: ../../docs/community/tutorials.rst:53 -msgid "Devlogs" -msgstr "" - -#: ../../docs/community/tutorials.rst:55 -msgid "`Andrea Catania (Physics & AI) `_" +msgid "`Steincodes `__" msgstr "" #: ../../docs/community/tutorials.rst:56 -msgid "`Bastiaan Olij (AR & VR) `_" +msgid "Devlogs" +msgstr "" + +#: ../../docs/community/tutorials.rst:58 +msgid "`Andrea Catania (Physics & AI) `_" msgstr "" #: ../../docs/community/tutorials.rst:59 -msgid "Resources" -msgstr "" - -#: ../../docs/community/tutorials.rst:61 -msgid "`awesome-godot: A curated list of free/libre plugins, scripts and add-ons `_" +msgid "`Bastiaan Olij (AR & VR) `_" msgstr "" #: ../../docs/community/tutorials.rst:62 +msgid "Resources" +msgstr "" + +#: ../../docs/community/tutorials.rst:64 +msgid "`awesome-godot: A curated list of free/libre plugins, scripts and add-ons `_" +msgstr "" + +#: ../../docs/community/tutorials.rst:65 msgid "`Zeef Godot Engine: A curated directory of resources by Andre Schmitz `_" msgstr "" diff --git a/sphinx/templates/development/compiling/compiling_for_android.pot b/sphinx/templates/development/compiling/compiling_for_android.pot index 36e6a8862c..d4b617239e 100644 --- a/sphinx/templates/development/compiling/compiling_for_android.pot +++ b/sphinx/templates/development/compiling/compiling_for_android.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_for_ios.pot b/sphinx/templates/development/compiling/compiling_for_ios.pot index 8a1800020b..d6630647bc 100644 --- a/sphinx/templates/development/compiling/compiling_for_ios.pot +++ b/sphinx/templates/development/compiling/compiling_for_ios.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_for_osx.pot b/sphinx/templates/development/compiling/compiling_for_osx.pot index b7c25a3de5..50af999535 100644 --- a/sphinx/templates/development/compiling/compiling_for_osx.pot +++ b/sphinx/templates/development/compiling/compiling_for_osx.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_for_uwp.pot b/sphinx/templates/development/compiling/compiling_for_uwp.pot index 0acae62445..c81932efa7 100644 --- a/sphinx/templates/development/compiling/compiling_for_uwp.pot +++ b/sphinx/templates/development/compiling/compiling_for_uwp.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_for_web.pot b/sphinx/templates/development/compiling/compiling_for_web.pot index 4abbb33c6d..1c0757a850 100644 --- a/sphinx/templates/development/compiling/compiling_for_web.pot +++ b/sphinx/templates/development/compiling/compiling_for_web.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_for_windows.pot b/sphinx/templates/development/compiling/compiling_for_windows.pot index 7447bfe626..b2315b016b 100644 --- a/sphinx/templates/development/compiling/compiling_for_windows.pot +++ b/sphinx/templates/development/compiling/compiling_for_windows.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_for_x11.pot b/sphinx/templates/development/compiling/compiling_for_x11.pot index 88cbf8427d..9468e01a36 100644 --- a/sphinx/templates/development/compiling/compiling_for_x11.pot +++ b/sphinx/templates/development/compiling/compiling_for_x11.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_with_mono.pot b/sphinx/templates/development/compiling/compiling_with_mono.pot index d0e9611ed0..803e0f4099 100644 --- a/sphinx/templates/development/compiling/compiling_with_mono.pot +++ b/sphinx/templates/development/compiling/compiling_with_mono.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/compiling_with_script_encryption_key.pot b/sphinx/templates/development/compiling/compiling_with_script_encryption_key.pot index f31ed44513..c511da0a1d 100644 --- a/sphinx/templates/development/compiling/compiling_with_script_encryption_key.pot +++ b/sphinx/templates/development/compiling/compiling_with_script_encryption_key.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/cross-compiling_for_ios_on_linux.pot b/sphinx/templates/development/compiling/cross-compiling_for_ios_on_linux.pot index 31503d1f9c..bfa6ea5288 100644 --- a/sphinx/templates/development/compiling/cross-compiling_for_ios_on_linux.pot +++ b/sphinx/templates/development/compiling/cross-compiling_for_ios_on_linux.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/getting_source.pot b/sphinx/templates/development/compiling/getting_source.pot index 25e1acb05b..c17b7602b3 100644 --- a/sphinx/templates/development/compiling/getting_source.pot +++ b/sphinx/templates/development/compiling/getting_source.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/index.pot b/sphinx/templates/development/compiling/index.pot index bfc3fe2efd..f9e06c3b33 100644 --- a/sphinx/templates/development/compiling/index.pot +++ b/sphinx/templates/development/compiling/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/introduction_to_the_buildsystem.pot b/sphinx/templates/development/compiling/introduction_to_the_buildsystem.pot index f27c2047c1..6074d8a3bd 100644 --- a/sphinx/templates/development/compiling/introduction_to_the_buildsystem.pot +++ b/sphinx/templates/development/compiling/introduction_to_the_buildsystem.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/compiling/optimizing_for_size.pot b/sphinx/templates/development/compiling/optimizing_for_size.pot index 953ac5a59b..105b75e5fc 100644 --- a/sphinx/templates/development/compiling/optimizing_for_size.pot +++ b/sphinx/templates/development/compiling/optimizing_for_size.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/binding_to_external_libraries.pot b/sphinx/templates/development/cpp/binding_to_external_libraries.pot index 85eca734a1..c416776d11 100644 --- a/sphinx/templates/development/cpp/binding_to_external_libraries.pot +++ b/sphinx/templates/development/cpp/binding_to_external_libraries.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/common_engine_methods_and_macros.pot b/sphinx/templates/development/cpp/common_engine_methods_and_macros.pot index 545c38a9d5..d755b4fd3f 100644 --- a/sphinx/templates/development/cpp/common_engine_methods_and_macros.pot +++ b/sphinx/templates/development/cpp/common_engine_methods_and_macros.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/android_studio.pot b/sphinx/templates/development/cpp/configuring_an_ide/android_studio.pot index 4e5d777776..04fb503859 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/android_studio.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/android_studio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/clion.pot b/sphinx/templates/development/cpp/configuring_an_ide/clion.pot index ec7bddca82..6a1cd02a41 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/clion.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/clion.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/code_blocks.pot b/sphinx/templates/development/cpp/configuring_an_ide/code_blocks.pot index f2043d6724..3d5159fd5e 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/code_blocks.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/code_blocks.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/index.pot b/sphinx/templates/development/cpp/configuring_an_ide/index.pot index 1f6f12a52b..fa04713272 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/index.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/kdevelop.pot b/sphinx/templates/development/cpp/configuring_an_ide/kdevelop.pot index a447553a5e..de1eae1ba6 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/kdevelop.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/kdevelop.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/qt_creator.pot b/sphinx/templates/development/cpp/configuring_an_ide/qt_creator.pot index 14abe935f3..3d4ef71cae 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/qt_creator.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/qt_creator.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/visual_studio.pot b/sphinx/templates/development/cpp/configuring_an_ide/visual_studio.pot index ff2fe626b5..2c40e8ebd8 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/visual_studio.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/visual_studio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/visual_studio_code.pot b/sphinx/templates/development/cpp/configuring_an_ide/visual_studio_code.pot index ce77fbd4c6..46d95ae1ce 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/visual_studio_code.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/visual_studio_code.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/configuring_an_ide/xcode.pot b/sphinx/templates/development/cpp/configuring_an_ide/xcode.pot index ce0cfda633..0808124f4a 100644 --- a/sphinx/templates/development/cpp/configuring_an_ide/xcode.pot +++ b/sphinx/templates/development/cpp/configuring_an_ide/xcode.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/core_types.pot b/sphinx/templates/development/cpp/core_types.pot index fdb1fd66f2..e5dd4c8517 100644 --- a/sphinx/templates/development/cpp/core_types.pot +++ b/sphinx/templates/development/cpp/core_types.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/custom_audiostreams.pot b/sphinx/templates/development/cpp/custom_audiostreams.pot index cad28156a8..d56fe62fe6 100644 --- a/sphinx/templates/development/cpp/custom_audiostreams.pot +++ b/sphinx/templates/development/cpp/custom_audiostreams.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/custom_godot_servers.pot b/sphinx/templates/development/cpp/custom_godot_servers.pot index b87c7a1a42..b77085138b 100644 --- a/sphinx/templates/development/cpp/custom_godot_servers.pot +++ b/sphinx/templates/development/cpp/custom_godot_servers.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/custom_modules_in_cpp.pot b/sphinx/templates/development/cpp/custom_modules_in_cpp.pot index c8c8b2fea8..3faf3766c5 100644 --- a/sphinx/templates/development/cpp/custom_modules_in_cpp.pot +++ b/sphinx/templates/development/cpp/custom_modules_in_cpp.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/custom_resource_format_loaders.pot b/sphinx/templates/development/cpp/custom_resource_format_loaders.pot index ee72eb5341..874a0a6360 100644 --- a/sphinx/templates/development/cpp/custom_resource_format_loaders.pot +++ b/sphinx/templates/development/cpp/custom_resource_format_loaders.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/index.pot b/sphinx/templates/development/cpp/index.pot index e7f9a32074..dd67a191a1 100644 --- a/sphinx/templates/development/cpp/index.pot +++ b/sphinx/templates/development/cpp/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/inheritance_class_tree.pot b/sphinx/templates/development/cpp/inheritance_class_tree.pot index 261b4abbf6..d51a226511 100644 --- a/sphinx/templates/development/cpp/inheritance_class_tree.pot +++ b/sphinx/templates/development/cpp/inheritance_class_tree.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/introduction_to_godot_development.pot b/sphinx/templates/development/cpp/introduction_to_godot_development.pot index 58616dc8f6..1ccf627ceb 100644 --- a/sphinx/templates/development/cpp/introduction_to_godot_development.pot +++ b/sphinx/templates/development/cpp/introduction_to_godot_development.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/object_class.pot b/sphinx/templates/development/cpp/object_class.pot index f26e4e600c..7287cb2d93 100644 --- a/sphinx/templates/development/cpp/object_class.pot +++ b/sphinx/templates/development/cpp/object_class.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/using_cpp_profilers.pot b/sphinx/templates/development/cpp/using_cpp_profilers.pot index f7f0eaf8dd..ea037b2b62 100644 --- a/sphinx/templates/development/cpp/using_cpp_profilers.pot +++ b/sphinx/templates/development/cpp/using_cpp_profilers.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/cpp/variant_class.pot b/sphinx/templates/development/cpp/variant_class.pot index 825a94a55c..8e013f3185 100644 --- a/sphinx/templates/development/cpp/variant_class.pot +++ b/sphinx/templates/development/cpp/variant_class.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/editor/creating_icons.pot b/sphinx/templates/development/editor/creating_icons.pot index f4c165b64e..3c287d2f66 100644 --- a/sphinx/templates/development/editor/creating_icons.pot +++ b/sphinx/templates/development/editor/creating_icons.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/editor/editor_style_guide.pot b/sphinx/templates/development/editor/editor_style_guide.pot index 0afee097ef..853c255349 100644 --- a/sphinx/templates/development/editor/editor_style_guide.pot +++ b/sphinx/templates/development/editor/editor_style_guide.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/editor/index.pot b/sphinx/templates/development/editor/index.pot index 99a800fd4a..2d08f59a5e 100644 --- a/sphinx/templates/development/editor/index.pot +++ b/sphinx/templates/development/editor/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/editor/introduction_to_editor_development.pot b/sphinx/templates/development/editor/introduction_to_editor_development.pot index 11ac3dbf3e..174ec10692 100644 --- a/sphinx/templates/development/editor/introduction_to_editor_development.pot +++ b/sphinx/templates/development/editor/introduction_to_editor_development.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -45,7 +45,7 @@ msgid "Technical choices" msgstr "" #: ../../docs/development/editor/introduction_to_editor_development.rst:24 -msgid "The Godot editor is drawn using Godot's renderer and :ref:`UI system `. It does *not* rely on a toolkit such as GTK or Qt. This is similar in spirit to software like Blender. While using toolkits makes it easier to achieve a \"native\" appearance, they are also quite heavy and their licensing is not compatible with Godot's." +msgid "The Godot editor is drawn using Godot's renderer and :ref:`UI system `. It does *not* rely on a toolkit such as GTK or Qt. This is similar in spirit to software like Blender. While using toolkits makes it easier to achieve a \"native\" appearance, they are also quite heavy and their licensing is not compatible with Godot's." msgstr "" #: ../../docs/development/editor/introduction_to_editor_development.rst:30 diff --git a/sphinx/templates/development/file_formats/gdscript_grammar.pot b/sphinx/templates/development/file_formats/gdscript_grammar.pot index d6cc8521ec..c17ffb33e7 100644 --- a/sphinx/templates/development/file_formats/gdscript_grammar.pot +++ b/sphinx/templates/development/file_formats/gdscript_grammar.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/file_formats/index.pot b/sphinx/templates/development/file_formats/index.pot index f91a8d74aa..aa7d4665ac 100644 --- a/sphinx/templates/development/file_formats/index.pot +++ b/sphinx/templates/development/file_formats/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/development/file_formats/tscn.pot b/sphinx/templates/development/file_formats/tscn.pot index 2e473c407d..96b6157241 100644 --- a/sphinx/templates/development/file_formats/tscn.pot +++ b/sphinx/templates/development/file_formats/tscn.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/getting_started/editor/default_key_mapping.pot b/sphinx/templates/getting_started/editor/default_key_mapping.pot deleted file mode 100644 index 068f6e21de..0000000000 --- a/sphinx/templates/getting_started/editor/default_key_mapping.pot +++ /dev/null @@ -1,2878 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:1 -msgid "cheatsheet, cheat sheet, shortcut" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:7 -msgid "Default editor shortcuts" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:8 -msgid "Many of Godot Editor functions can be executed with keyboard shortcuts. This page lists functions which have associated shortcuts by default, but many others are available for customization in editor settings as well. To change keys associated with these and other actions navigate to ``Editor -> Editor Settings -> Shortcuts``." -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:13 -msgid "While some actions are universal, a lot of shortcuts are specific to individual tools. For this reason it is possible for some key combinations to be assigned to more than one function. The correct action will be performed depending on the context." -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:18 -msgid "While Windows and Linux builds of the editor share most of the default settings, some shortcuts may differ for macOS version. This is done for better integration of the editor into macOS ecosystem. Users fluent with standard shortcuts on that OS should find Godot Editor's default key mapping intuitive." -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:24 -msgid "General Editor Actions" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:27 -#: ../../docs/getting_started/editor/default_key_mapping.rst:92 -#: ../../docs/getting_started/editor/default_key_mapping.rst:145 -#: ../../docs/getting_started/editor/default_key_mapping.rst:220 -#: ../../docs/getting_started/editor/default_key_mapping.rst:301 -#: ../../docs/getting_started/editor/default_key_mapping.rst:348 -#: ../../docs/getting_started/editor/default_key_mapping.rst:373 -#: ../../docs/getting_started/editor/default_key_mapping.rst:384 -#: ../../docs/getting_started/editor/default_key_mapping.rst:397 -#: ../../docs/getting_started/editor/default_key_mapping.rst:428 -#: ../../docs/getting_started/editor/default_key_mapping.rst:441 -#: ../../docs/getting_started/editor/default_key_mapping.rst:464 -#: ../../docs/getting_started/editor/default_key_mapping.rst:481 -#: ../../docs/getting_started/editor/default_key_mapping.rst:516 -msgid "Action name" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:27 -#: ../../docs/getting_started/editor/default_key_mapping.rst:92 -#: ../../docs/getting_started/editor/default_key_mapping.rst:145 -#: ../../docs/getting_started/editor/default_key_mapping.rst:220 -#: ../../docs/getting_started/editor/default_key_mapping.rst:301 -#: ../../docs/getting_started/editor/default_key_mapping.rst:348 -#: ../../docs/getting_started/editor/default_key_mapping.rst:373 -#: ../../docs/getting_started/editor/default_key_mapping.rst:384 -#: ../../docs/getting_started/editor/default_key_mapping.rst:397 -#: ../../docs/getting_started/editor/default_key_mapping.rst:428 -#: ../../docs/getting_started/editor/default_key_mapping.rst:441 -#: ../../docs/getting_started/editor/default_key_mapping.rst:464 -#: ../../docs/getting_started/editor/default_key_mapping.rst:481 -#: ../../docs/getting_started/editor/default_key_mapping.rst:516 -msgid "Windows, Linux" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:27 -#: ../../docs/getting_started/editor/default_key_mapping.rst:92 -#: ../../docs/getting_started/editor/default_key_mapping.rst:145 -#: ../../docs/getting_started/editor/default_key_mapping.rst:220 -#: ../../docs/getting_started/editor/default_key_mapping.rst:301 -#: ../../docs/getting_started/editor/default_key_mapping.rst:348 -#: ../../docs/getting_started/editor/default_key_mapping.rst:373 -#: ../../docs/getting_started/editor/default_key_mapping.rst:384 -#: ../../docs/getting_started/editor/default_key_mapping.rst:397 -#: ../../docs/getting_started/editor/default_key_mapping.rst:428 -#: ../../docs/getting_started/editor/default_key_mapping.rst:441 -#: ../../docs/getting_started/editor/default_key_mapping.rst:464 -#: ../../docs/getting_started/editor/default_key_mapping.rst:481 -#: ../../docs/getting_started/editor/default_key_mapping.rst:516 -msgid "macOS" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:27 -#: ../../docs/getting_started/editor/default_key_mapping.rst:92 -#: ../../docs/getting_started/editor/default_key_mapping.rst:145 -#: ../../docs/getting_started/editor/default_key_mapping.rst:220 -#: ../../docs/getting_started/editor/default_key_mapping.rst:301 -#: ../../docs/getting_started/editor/default_key_mapping.rst:348 -#: ../../docs/getting_started/editor/default_key_mapping.rst:373 -#: ../../docs/getting_started/editor/default_key_mapping.rst:384 -#: ../../docs/getting_started/editor/default_key_mapping.rst:397 -#: ../../docs/getting_started/editor/default_key_mapping.rst:428 -#: ../../docs/getting_started/editor/default_key_mapping.rst:441 -#: ../../docs/getting_started/editor/default_key_mapping.rst:464 -#: ../../docs/getting_started/editor/default_key_mapping.rst:481 -#: ../../docs/getting_started/editor/default_key_mapping.rst:516 -msgid "Editor setting" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:29 -msgid "Open 2D Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:29 -msgid ":kbd:`Ctrl + F1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:29 -msgid ":kbd:`Alt + 1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:29 -msgid "``editor/editor_2d``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:31 -msgid "Open 3D Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:31 -#: ../../docs/getting_started/editor/default_key_mapping.rst:445 -msgid ":kbd:`Ctrl + F2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:31 -msgid ":kbd:`Alt + 2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:31 -msgid "``editor/editor_3d``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:33 -msgid "Open Script Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:33 -msgid ":kbd:`Ctrl + F3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:33 -msgid ":kbd:`Alt + 3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:33 -msgid "``editor/editor_script``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:35 -msgid "Search Help" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:35 -msgid ":kbd:`F1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:35 -msgid ":kbd:`Alt + Space`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:35 -msgid "``editor/editor_help``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:37 -msgid "Distraction Free Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:37 -msgid ":kbd:`Ctrl + Shift + F11`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:37 -msgid ":kbd:`Cmd + Ctrl + D`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:37 -msgid "``editor/distraction_free_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:39 -msgid "Next tab" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:39 -msgid ":kbd:`Ctrl + Tab`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:39 -msgid ":kbd:`Cmd + Tab`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:39 -msgid "``editor/next_tab``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:41 -msgid "Previous tab" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:41 -msgid ":kbd:`Ctrl + Shift + Tab`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:41 -msgid ":kbd:`Cmd + Shift + Tab`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:41 -msgid "``editor/prev_tab``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:43 -msgid "Filter Files" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:43 -msgid ":kbd:`Ctrl + Alt + P`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:43 -msgid ":kbd:`Cmd + Alt + P`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:43 -msgid "``editor/filter_files``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:45 -msgid "Open Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:45 -msgid ":kbd:`Ctrl + O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:45 -msgid ":kbd:`Cmd + O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:45 -msgid "``editor/open_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:47 -msgid "Close Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:47 -msgid ":kbd:`Ctrl + Shift + W`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:47 -msgid ":kbd:`Cmd + Shift + W`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:47 -msgid "``editor/close_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:49 -msgid "Reopen Closed Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:49 -#: ../../docs/getting_started/editor/default_key_mapping.rst:319 -msgid ":kbd:`Ctrl + Shift + T`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:49 -#: ../../docs/getting_started/editor/default_key_mapping.rst:319 -msgid ":kbd:`Cmd + Shift + T`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:49 -msgid "``editor/reopen_closed_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:51 -msgid "Save Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:51 -msgid ":kbd:`Ctrl + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:51 -msgid ":kbd:`Cmd + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:51 -msgid "``editor/save_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:53 -msgid "Save Scene As" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:53 -msgid ":kbd:`Ctrl + Shift + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:53 -msgid ":kbd:`Cmd + Shift + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:53 -msgid "``editor/save_scene_as``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:55 -msgid "Save All Scenes" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:55 -#: ../../docs/getting_started/editor/default_key_mapping.rst:323 -msgid ":kbd:`Ctrl + Shift + Alt + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:55 -#: ../../docs/getting_started/editor/default_key_mapping.rst:323 -msgid ":kbd:`Cmd + Shift + Alt + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:55 -msgid "``editor/save_all_scenes``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:57 -msgid "Quick Open" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:57 -#: ../../docs/getting_started/editor/default_key_mapping.rst:57 -msgid ":kbd:`Shift + Alt + O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:57 -msgid "``editor/quick_open``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:59 -msgid "Quick Open Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:59 -msgid ":kbd:`Ctrl + Shift + O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:59 -msgid ":kbd:`Cmd + Shift + O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:59 -msgid "``editor/quick_open_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:61 -msgid "Quick Open Script" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:61 -msgid ":kbd:`Ctrl + Alt + O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:61 -msgid ":kbd:`Cmd + Alt + O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:61 -msgid "``editor/quick_open_script``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:63 -#: ../../docs/getting_started/editor/default_key_mapping.rst:242 -msgid "Undo" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:63 -#: ../../docs/getting_started/editor/default_key_mapping.rst:242 -msgid ":kbd:`Ctrl + Z`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:63 -#: ../../docs/getting_started/editor/default_key_mapping.rst:242 -msgid ":kbd:`Cmd + Z`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:63 -msgid "``editor/undo``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:65 -#: ../../docs/getting_started/editor/default_key_mapping.rst:244 -msgid "Redo" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:65 -msgid ":kbd:`Ctrl + Shift + Z`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:65 -msgid ":kbd:`Cmd + Shift + Z`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:65 -msgid "``editor/redo``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:67 -msgid "Quit" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:67 -msgid ":kbd:`Ctrl + Q`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:67 -msgid ":kbd:`Cmd + Q`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:67 -msgid "``editor/file_quit``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:69 -msgid "Quit to Project List" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:69 -msgid ":kbd:`Ctrl + Shift + Q`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:69 -msgid ":kbd:`Shift + Alt + Q`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:69 -msgid "``editor/quit_to_project_list``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:71 -msgid "Take Screenshot" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:71 -msgid ":kbd:`Ctrl + F12`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:71 -msgid ":kbd:`Cmd + F12`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:71 -msgid "``editor/take_screenshot``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:73 -msgid "Toggle Fullscreen" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:73 -msgid ":kbd:`Shift + F11`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:73 -msgid ":kbd:`Cmd + Ctrl + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:73 -msgid "``editor/fullscreen_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:75 -msgid "Play" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:75 -#: ../../docs/getting_started/editor/default_key_mapping.rst:405 -#: ../../docs/getting_started/editor/default_key_mapping.rst:405 -msgid ":kbd:`F5`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:75 -#: ../../docs/getting_started/editor/default_key_mapping.rst:278 -msgid ":kbd:`Cmd + B`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:75 -msgid "``editor/play``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:77 -msgid "Pause Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:77 -msgid ":kbd:`F7`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:77 -msgid ":kbd:`Cmd + Ctrl + Y`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:77 -msgid "``editor/pause_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:79 -msgid "Stop" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:79 -msgid ":kbd:`F8`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:79 -#: ../../docs/getting_started/editor/default_key_mapping.rst:290 -msgid ":kbd:`Cmd + .`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:79 -msgid "``editor/stop``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:81 -msgid "Play Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:81 -msgid ":kbd:`F6`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:81 -#: ../../docs/getting_started/editor/default_key_mapping.rst:364 -msgid ":kbd:`Cmd + R`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:81 -msgid "``editor/play_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:83 -msgid "Play Custom Scene" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:83 -msgid ":kbd:`Ctrl + Shift + F5`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:83 -#: ../../docs/getting_started/editor/default_key_mapping.rst:240 -#: ../../docs/getting_started/editor/default_key_mapping.rst:325 -msgid ":kbd:`Cmd + Shift + R`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:83 -msgid "``editor/play_custom_scene``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:85 -msgid "Expand Bottom Panel" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:85 -#: ../../docs/getting_started/editor/default_key_mapping.rst:85 -msgid ":kbd:`Shift + F12`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:85 -msgid "``editor/bottom_panel_expand``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:89 -msgid "2D / Canvas Item Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:94 -#: ../../docs/getting_started/editor/default_key_mapping.rst:337 -msgid "Zoom In" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:94 -#: ../../docs/getting_started/editor/default_key_mapping.rst:337 -msgid ":kbd:`Ctrl + =`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:94 -#: ../../docs/getting_started/editor/default_key_mapping.rst:337 -msgid ":kbd:`Cmd + =`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:94 -msgid "``canvas_item_editor/zoom_plus``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:96 -#: ../../docs/getting_started/editor/default_key_mapping.rst:339 -msgid "Zoom Out" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:96 -#: ../../docs/getting_started/editor/default_key_mapping.rst:339 -msgid ":kbd:`Ctrl + -`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:96 -#: ../../docs/getting_started/editor/default_key_mapping.rst:339 -msgid ":kbd:`Cmd + -`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:96 -msgid "``canvas_item_editor/zoom_minus``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:98 -msgid "Zoom Reset" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:98 -#: ../../docs/getting_started/editor/default_key_mapping.rst:341 -msgid ":kbd:`Ctrl + 0`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:98 -#: ../../docs/getting_started/editor/default_key_mapping.rst:341 -msgid ":kbd:`Cmd + 0`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:98 -msgid "``canvas_item_editor/zoom_reset``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:100 -msgid "Pan View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:100 -#: ../../docs/getting_started/editor/default_key_mapping.rst:100 -msgid ":kbd:`Space`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:100 -msgid "``canvas_item_editor/pan_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:102 -#: ../../docs/getting_started/editor/default_key_mapping.rst:165 -msgid "Select Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:102 -#: ../../docs/getting_started/editor/default_key_mapping.rst:102 -#: ../../docs/getting_started/editor/default_key_mapping.rst:159 -#: ../../docs/getting_started/editor/default_key_mapping.rst:159 -#: ../../docs/getting_started/editor/default_key_mapping.rst:165 -#: ../../docs/getting_started/editor/default_key_mapping.rst:165 -msgid ":kbd:`Q`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:102 -msgid "``canvas_item_editor/select_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:104 -#: ../../docs/getting_started/editor/default_key_mapping.rst:167 -msgid "Move Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:104 -#: ../../docs/getting_started/editor/default_key_mapping.rst:104 -#: ../../docs/getting_started/editor/default_key_mapping.rst:153 -#: ../../docs/getting_started/editor/default_key_mapping.rst:153 -#: ../../docs/getting_started/editor/default_key_mapping.rst:167 -#: ../../docs/getting_started/editor/default_key_mapping.rst:167 -#: ../../docs/getting_started/editor/default_key_mapping.rst:501 -#: ../../docs/getting_started/editor/default_key_mapping.rst:501 -msgid ":kbd:`W`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:104 -msgid "``canvas_item_editor/move_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:106 -#: ../../docs/getting_started/editor/default_key_mapping.rst:169 -msgid "Rotate Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:106 -#: ../../docs/getting_started/editor/default_key_mapping.rst:106 -#: ../../docs/getting_started/editor/default_key_mapping.rst:157 -#: ../../docs/getting_started/editor/default_key_mapping.rst:157 -#: ../../docs/getting_started/editor/default_key_mapping.rst:169 -#: ../../docs/getting_started/editor/default_key_mapping.rst:169 -msgid ":kbd:`E`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:106 -msgid "``canvas_item_editor/rotate_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:108 -#: ../../docs/getting_started/editor/default_key_mapping.rst:171 -msgid "Scale Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:108 -#: ../../docs/getting_started/editor/default_key_mapping.rst:108 -#: ../../docs/getting_started/editor/default_key_mapping.rst:155 -#: ../../docs/getting_started/editor/default_key_mapping.rst:155 -#: ../../docs/getting_started/editor/default_key_mapping.rst:499 -#: ../../docs/getting_started/editor/default_key_mapping.rst:499 -msgid ":kbd:`S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:108 -msgid "``canvas_item_editor/scale_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:110 -msgid "Ruler Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:110 -#: ../../docs/getting_started/editor/default_key_mapping.rst:110 -#: ../../docs/getting_started/editor/default_key_mapping.rst:171 -#: ../../docs/getting_started/editor/default_key_mapping.rst:171 -msgid ":kbd:`R`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:110 -msgid "``canvas_item_editor/ruler_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:112 -msgid "Use Smart Snap" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:112 -#: ../../docs/getting_started/editor/default_key_mapping.rst:112 -msgid ":kbd:`Shift + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:112 -msgid "``canvas_item_editor/use_smart_snap``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:114 -msgid "Use Grid Snap" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:114 -#: ../../docs/getting_started/editor/default_key_mapping.rst:114 -msgid ":kbd:`Shift + G`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:114 -msgid "``canvas_item_editor/use_grid_snap``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:116 -msgid "Multiply grid step by 2" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:116 -#: ../../docs/getting_started/editor/default_key_mapping.rst:116 -msgid ":kbd:`Num *`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:116 -msgid "``canvas_item_editor/multiply_grid_step``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:118 -msgid "Divide grid step by 2" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:118 -#: ../../docs/getting_started/editor/default_key_mapping.rst:118 -msgid ":kbd:`Num /`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:118 -msgid "``canvas_item_editor/divide_grid_step``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:120 -msgid "Always Show Grid" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:120 -#: ../../docs/getting_started/editor/default_key_mapping.rst:120 -#: ../../docs/getting_started/editor/default_key_mapping.rst:489 -#: ../../docs/getting_started/editor/default_key_mapping.rst:489 -msgid ":kbd:`G`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:120 -msgid "``canvas_item_editor/show_grid``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:122 -msgid "Show Helpers" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:122 -#: ../../docs/getting_started/editor/default_key_mapping.rst:122 -msgid ":kbd:`H`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:122 -msgid "``canvas_item_editor/show_helpers``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:124 -msgid "Show Guides" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:124 -#: ../../docs/getting_started/editor/default_key_mapping.rst:124 -#: ../../docs/getting_started/editor/default_key_mapping.rst:175 -#: ../../docs/getting_started/editor/default_key_mapping.rst:175 -msgid ":kbd:`Y`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:124 -msgid "``canvas_item_editor/show_guides``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:126 -msgid "Center Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:126 -#: ../../docs/getting_started/editor/default_key_mapping.rst:126 -#: ../../docs/getting_started/editor/default_key_mapping.rst:197 -#: ../../docs/getting_started/editor/default_key_mapping.rst:197 -msgid ":kbd:`F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:126 -msgid "``canvas_item_editor/center_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:128 -msgid "Frame Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:128 -#: ../../docs/getting_started/editor/default_key_mapping.rst:128 -#: ../../docs/getting_started/editor/default_key_mapping.rst:147 -#: ../../docs/getting_started/editor/default_key_mapping.rst:147 -msgid ":kbd:`Shift + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:128 -msgid "``canvas_item_editor/frame_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:130 -msgid "Preview Canvas Scale" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:130 -msgid ":kbd:`Ctrl + Shift + P`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:130 -msgid ":kbd:`Cmd + Shift + P`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:130 -msgid "``canvas_item_editor/preview_canvas_scale``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:132 -msgid "Insert Key" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:132 -#: ../../docs/getting_started/editor/default_key_mapping.rst:132 -msgid ":kbd:`Ins`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:132 -msgid "``canvas_item_editor/anim_insert_key``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:134 -msgid "Insert Key (Existing Tracks)" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:134 -msgid ":kbd:`Ctrl + Ins`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:134 -msgid ":kbd:`Cmd + Ins`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:134 -msgid "``canvas_item_editor/anim_insert_key_existing_tracks``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:136 -msgid "Make Custom Bones from Nodes" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:136 -#: ../../docs/getting_started/editor/default_key_mapping.rst:280 -msgid ":kbd:`Ctrl + Shift + B`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:136 -#: ../../docs/getting_started/editor/default_key_mapping.rst:280 -#: ../../docs/getting_started/editor/default_key_mapping.rst:286 -msgid ":kbd:`Cmd + Shift + B`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:136 -msgid "``canvas_item_editor/skeleton_make_bones``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:138 -msgid "Clear Pose" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:138 -#: ../../docs/getting_started/editor/default_key_mapping.rst:138 -msgid ":kbd:`Shift + K`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:138 -msgid "``canvas_item_editor/anim_clear_pose``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:142 -msgid "3D / Spatial Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:147 -msgid "Toggle Freelook" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:147 -msgid "``spatial_editor/freelook_toggle``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:149 -msgid "Freelook Left" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:149 -#: ../../docs/getting_started/editor/default_key_mapping.rst:149 -#: ../../docs/getting_started/editor/default_key_mapping.rst:497 -#: ../../docs/getting_started/editor/default_key_mapping.rst:497 -msgid ":kbd:`A`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:149 -msgid "``spatial_editor/freelook_left``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:151 -msgid "Freelook Right" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:151 -#: ../../docs/getting_started/editor/default_key_mapping.rst:151 -msgid ":kbd:`D`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:151 -msgid "``spatial_editor/freelook_right``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:153 -msgid "Freelook Forward" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:153 -msgid "``spatial_editor/freelook_forward``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:155 -msgid "Freelook Backwards" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:155 -msgid "``spatial_editor/freelook_backwards``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:157 -msgid "Freelook Up" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:157 -msgid "``spatial_editor/freelook_up``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:159 -msgid "Freelook Down" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:159 -msgid "``spatial_editor/freelook_down``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:161 -msgid "Freelook Speed Modifier" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:161 -#: ../../docs/getting_started/editor/default_key_mapping.rst:161 -msgid ":kbd:`Shift`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:161 -msgid "``spatial_editor/freelook_speed_modifier``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:163 -msgid "Freelook Slow Modifier" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:163 -#: ../../docs/getting_started/editor/default_key_mapping.rst:163 -msgid ":kbd:`Alt`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:163 -msgid "``spatial_editor/freelook_slow_modifier``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:165 -msgid "``spatial_editor/tool_select``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:167 -msgid "``spatial_editor/tool_move``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:169 -msgid "``spatial_editor/tool_rotate``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:171 -msgid "``spatial_editor/tool_scale``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:173 -msgid "Use Local Space" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:173 -#: ../../docs/getting_started/editor/default_key_mapping.rst:173 -#: ../../docs/getting_started/editor/default_key_mapping.rst:491 -#: ../../docs/getting_started/editor/default_key_mapping.rst:491 -msgid ":kbd:`T`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:173 -msgid "``spatial_editor/local_coords``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:175 -msgid "Use Snap" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:175 -msgid "``spatial_editor/snap``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:177 -msgid "Snap Object to Floor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:177 -#: ../../docs/getting_started/editor/default_key_mapping.rst:177 -#: ../../docs/getting_started/editor/default_key_mapping.rst:518 -#: ../../docs/getting_started/editor/default_key_mapping.rst:518 -msgid ":kbd:`PgDown`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:177 -msgid "``spatial_editor/snap_to_floor``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:179 -msgid "Top View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:179 -#: ../../docs/getting_started/editor/default_key_mapping.rst:179 -msgid ":kbd:`Num 7`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:179 -msgid "``spatial_editor/top_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:181 -msgid "Bottom View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:181 -#: ../../docs/getting_started/editor/default_key_mapping.rst:181 -msgid ":kbd:`Alt + Num 7`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:181 -msgid "``spatial_editor/bottom_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:183 -msgid "Front View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:183 -#: ../../docs/getting_started/editor/default_key_mapping.rst:183 -msgid ":kbd:`Num 1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:183 -msgid "``spatial_editor/front_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:185 -msgid "Rear View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:185 -#: ../../docs/getting_started/editor/default_key_mapping.rst:185 -msgid ":kbd:`Alt + Num 1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:185 -msgid "``spatial_editor/rear_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:187 -msgid "Right View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:187 -#: ../../docs/getting_started/editor/default_key_mapping.rst:187 -msgid ":kbd:`Num 3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:187 -msgid "``spatial_editor/right_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:189 -msgid "Left View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:189 -#: ../../docs/getting_started/editor/default_key_mapping.rst:189 -msgid ":kbd:`Alt + Num 3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:189 -msgid "``spatial_editor/left_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:191 -msgid "Switch Perspective/Orthogonal View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:191 -#: ../../docs/getting_started/editor/default_key_mapping.rst:191 -msgid ":kbd:`Num 5`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:191 -msgid "``spatial_editor/switch_perspective_orthogonal``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:193 -msgid "Insert Animation Key" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:193 -#: ../../docs/getting_started/editor/default_key_mapping.rst:193 -msgid ":kbd:`K`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:193 -msgid "``spatial_editor/insert_anim_key``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:195 -msgid "Focus Origin" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:195 -#: ../../docs/getting_started/editor/default_key_mapping.rst:195 -msgid ":kbd:`O`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:195 -msgid "``spatial_editor/focus_origin``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:197 -msgid "Focus Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:197 -msgid "``spatial_editor/focus_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:199 -msgid "Align Transform with View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:199 -msgid ":kbd:`Ctrl + Alt + M`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:199 -msgid ":kbd:`Cmd + Alt + M`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:199 -msgid "``spatial_editor/align_transform_with_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:201 -msgid "Align Rotation with View" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:201 -#: ../../docs/getting_started/editor/default_key_mapping.rst:282 -msgid ":kbd:`Ctrl + Alt + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:201 -msgid ":kbd:`Cmd + Alt + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:201 -msgid "``spatial_editor/align_rotation_with_view``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:203 -msgid "1 Viewport" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:203 -msgid ":kbd:`Ctrl + 1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:203 -msgid ":kbd:`Cmd + 1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:203 -msgid "``spatial_editor/1_viewport``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:205 -msgid "2 Viewports" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:205 -msgid ":kbd:`Ctrl + 2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:205 -msgid ":kbd:`Cmd + 2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:205 -msgid "``spatial_editor/2_viewports``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:207 -msgid "2 Viewports (Alt)" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:207 -msgid ":kbd:`Ctrl + Alt + 2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:207 -msgid ":kbd:`Cmd + Alt + 2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:207 -msgid "``spatial_editor/2_viewports_alt``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:209 -msgid "3 Viewports" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:209 -msgid ":kbd:`Ctrl + 3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:209 -msgid ":kbd:`Cmd + 3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:209 -msgid "``spatial_editor/3_viewports``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:211 -msgid "3 Viewports (Alt)" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:211 -msgid ":kbd:`Ctrl + Alt + 3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:211 -msgid ":kbd:`Cmd + Alt + 3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:211 -msgid "``spatial_editor/3_viewports_alt``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:213 -msgid "4 Viewports" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:213 -msgid ":kbd:`Ctrl + 4`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:213 -msgid ":kbd:`Cmd + 4`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:213 -msgid "``spatial_editor/4_viewports``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:217 -msgid "Text Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:222 -msgid "Cut" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:222 -#: ../../docs/getting_started/editor/default_key_mapping.rst:354 -#: ../../docs/getting_started/editor/default_key_mapping.rst:505 -msgid ":kbd:`Ctrl + X`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:222 -#: ../../docs/getting_started/editor/default_key_mapping.rst:354 -#: ../../docs/getting_started/editor/default_key_mapping.rst:505 -msgid ":kbd:`Cmd + X`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:222 -msgid "``script_text_editor/cut``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:224 -msgid "Copy" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:224 -#: ../../docs/getting_started/editor/default_key_mapping.rst:352 -#: ../../docs/getting_started/editor/default_key_mapping.rst:375 -#: ../../docs/getting_started/editor/default_key_mapping.rst:430 -#: ../../docs/getting_started/editor/default_key_mapping.rst:447 -#: ../../docs/getting_started/editor/default_key_mapping.rst:507 -msgid ":kbd:`Ctrl + C`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:224 -#: ../../docs/getting_started/editor/default_key_mapping.rst:352 -#: ../../docs/getting_started/editor/default_key_mapping.rst:375 -#: ../../docs/getting_started/editor/default_key_mapping.rst:430 -#: ../../docs/getting_started/editor/default_key_mapping.rst:447 -#: ../../docs/getting_started/editor/default_key_mapping.rst:507 -msgid ":kbd:`Cmd + C`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:224 -msgid "``script_text_editor/copy``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:226 -msgid "Paste" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:226 -#: ../../docs/getting_started/editor/default_key_mapping.rst:356 -msgid ":kbd:`Ctrl + V`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:226 -#: ../../docs/getting_started/editor/default_key_mapping.rst:356 -msgid ":kbd:`Cmd + V`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:226 -msgid "``script_text_editor/paste``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:228 -msgid "Select All" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:228 -#: ../../docs/getting_started/editor/default_key_mapping.rst:443 -msgid ":kbd:`Ctrl + A`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:228 -#: ../../docs/getting_started/editor/default_key_mapping.rst:443 -msgid ":kbd:`Cmd + A`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:228 -msgid "``script_text_editor/select_all``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:230 -#: ../../docs/getting_started/editor/default_key_mapping.rst:303 -msgid "Find" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:230 -#: ../../docs/getting_started/editor/default_key_mapping.rst:303 -#: ../../docs/getting_started/editor/default_key_mapping.rst:350 -#: ../../docs/getting_started/editor/default_key_mapping.rst:483 -msgid ":kbd:`Ctrl + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:230 -#: ../../docs/getting_started/editor/default_key_mapping.rst:303 -#: ../../docs/getting_started/editor/default_key_mapping.rst:350 -#: ../../docs/getting_started/editor/default_key_mapping.rst:483 -msgid ":kbd:`Cmd + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:230 -msgid "``script_text_editor/find``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:232 -#: ../../docs/getting_started/editor/default_key_mapping.rst:305 -msgid "Find Next" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:232 -#: ../../docs/getting_started/editor/default_key_mapping.rst:305 -#: ../../docs/getting_started/editor/default_key_mapping.rst:305 -msgid ":kbd:`F3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:232 -#: ../../docs/getting_started/editor/default_key_mapping.rst:360 -msgid ":kbd:`Cmd + G`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:232 -msgid "``script_text_editor/find_next``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:234 -#: ../../docs/getting_started/editor/default_key_mapping.rst:307 -msgid "Find Previous" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:234 -#: ../../docs/getting_started/editor/default_key_mapping.rst:307 -#: ../../docs/getting_started/editor/default_key_mapping.rst:307 -msgid ":kbd:`Shift + F3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:234 -msgid ":kbd:`Cmd + Shift + G`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:234 -msgid "``script_text_editor/find_previous``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:236 -#: ../../docs/getting_started/editor/default_key_mapping.rst:309 -msgid "Find in Files" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:236 -#: ../../docs/getting_started/editor/default_key_mapping.rst:309 -msgid ":kbd:`Ctrl + Shift + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:236 -#: ../../docs/getting_started/editor/default_key_mapping.rst:309 -msgid ":kbd:`Cmd + Shift + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:236 -msgid "``script_text_editor/find_in_files``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:238 -msgid "Replace" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:238 -#: ../../docs/getting_started/editor/default_key_mapping.rst:364 -msgid ":kbd:`Ctrl + R`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:238 -msgid ":kbd:`Alt + Cmd + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:238 -msgid "``script_text_editor/replace``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:240 -msgid "Replace in Files" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:240 -#: ../../docs/getting_started/editor/default_key_mapping.rst:325 -msgid ":kbd:`Ctrl + Shift + R`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:240 -msgid "``script_text_editor/replace_in_files``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:242 -msgid "``script_text_editor/undo``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:244 -msgid ":kbd:`Ctrl + Y`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:244 -msgid ":kbd:`Cmd + Y`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:244 -msgid "``script_text_editor/redo``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:246 -#: ../../docs/getting_started/editor/default_key_mapping.rst:311 -#: ../../docs/getting_started/editor/default_key_mapping.rst:455 -msgid "Move Up" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:246 -#: ../../docs/getting_started/editor/default_key_mapping.rst:246 -#: ../../docs/getting_started/editor/default_key_mapping.rst:403 -#: ../../docs/getting_started/editor/default_key_mapping.rst:403 -msgid ":kbd:`Alt + Up Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:246 -msgid "``script_text_editor/move_up``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:248 -#: ../../docs/getting_started/editor/default_key_mapping.rst:313 -#: ../../docs/getting_started/editor/default_key_mapping.rst:457 -msgid "Move Down" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:248 -#: ../../docs/getting_started/editor/default_key_mapping.rst:248 -msgid ":kbd:`Alt + Down Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:248 -msgid "``script_text_editor/move_down``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:250 -msgid "Delete Line" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:250 -#: ../../docs/getting_started/editor/default_key_mapping.rst:377 -msgid ":kbd:`Ctrl + Shift + K`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:250 -#: ../../docs/getting_started/editor/default_key_mapping.rst:377 -msgid ":kbd:`Cmd + Shift + K`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:250 -msgid "``script_text_editor/delete_line``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:252 -msgid "Toggle Comment" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:252 -msgid ":kbd:`Ctrl + K`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:252 -msgid ":kbd:`Cmd + K`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:252 -msgid "``script_text_editor/toggle_comment``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:254 -msgid "Fold/Unfold Line" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:254 -#: ../../docs/getting_started/editor/default_key_mapping.rst:254 -#: ../../docs/getting_started/editor/default_key_mapping.rst:409 -#: ../../docs/getting_started/editor/default_key_mapping.rst:409 -msgid ":kbd:`Alt + F`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:254 -msgid "``script_text_editor/toggle_fold_line``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:256 -msgid "Clone Down" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:256 -#: ../../docs/getting_started/editor/default_key_mapping.rst:417 -#: ../../docs/getting_started/editor/default_key_mapping.rst:432 -#: ../../docs/getting_started/editor/default_key_mapping.rst:453 -#: ../../docs/getting_started/editor/default_key_mapping.rst:466 -msgid ":kbd:`Ctrl + D`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:256 -msgid ":kbd:`Cmd + Shift + C`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:256 -msgid "``script_text_editor/clone_down``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:258 -msgid "Complete Symbol" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:258 -#: ../../docs/getting_started/editor/default_key_mapping.rst:258 -msgid ":kbd:`Ctrl + Space`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:258 -msgid "``script_text_editor/complete_symbol``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:260 -msgid "Evaluate Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:260 -msgid ":kbd:`Ctrl + Shift + E`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:260 -msgid ":kbd:`Cmd + Shift + E`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:260 -msgid "``script_text_editor/evaluate_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:262 -msgid "Trim Trailing Whitespace" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:262 -msgid ":kbd:`Ctrl + Alt + T`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:262 -msgid ":kbd:`Cmd + Alt + T`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:262 -msgid "``script_text_editor/trim_trailing_whitespace``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:264 -msgid "Uppercase" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:264 -#: ../../docs/getting_started/editor/default_key_mapping.rst:264 -msgid ":kbd:`Shift + F4`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:264 -msgid "``script_text_editor/convert_to_uppercase``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:266 -msgid "Lowercase" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:266 -#: ../../docs/getting_started/editor/default_key_mapping.rst:266 -msgid ":kbd:`Shift + F5`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:266 -msgid "``script_text_editor/convert_to_lowercase``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:268 -msgid "Capitalize" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:268 -#: ../../docs/getting_started/editor/default_key_mapping.rst:268 -msgid ":kbd:`Shift + F6`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:268 -msgid "``script_text_editor/capitalize``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:270 -msgid "Convert Indent to Spaces" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:270 -msgid ":kbd:`Ctrl + Shift + Y`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:270 -msgid ":kbd:`Cmd + Shift + Y`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:270 -msgid "``script_text_editor/convert_indent_to_spaces``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:272 -msgid "Convert Indent to Tabs" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:272 -msgid ":kbd:`Ctrl + Shift + I`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:272 -msgid ":kbd:`Cmd + Shift + I`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:272 -msgid "``script_text_editor/convert_indent_to_tabs``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:274 -msgid "Auto Indent" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:274 -msgid ":kbd:`Ctrl + I`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:274 -msgid ":kbd:`Cmd + I`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:274 -msgid "``script_text_editor/auto_indent``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:276 -msgid "Toggle Bookmark" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:276 -msgid ":kbd:`Ctrl + Alt + B`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:276 -msgid ":kbd:`Cmd + Alt + B`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:276 -msgid "``script_text_editor/toggle_bookmark``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:278 -msgid "Go to Next Bookmark" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:278 -msgid ":kbd:`Ctrl + B`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:278 -msgid "``script_text_editor/goto_next_bookmark``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:280 -msgid "Go to Previous Bookmark" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:280 -msgid "``script_text_editor/goto_previous_bookmark``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:282 -msgid "Go to Function" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:282 -msgid ":kbd:`Ctrl + Cmd + J`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:282 -msgid "``script_text_editor/goto_function``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:284 -msgid "Go to Line" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:284 -msgid ":kbd:`Ctrl + L`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:284 -msgid ":kbd:`Cmd + L`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:284 -msgid "``script_text_editor/goto_line``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:286 -#: ../../docs/getting_started/editor/default_key_mapping.rst:366 -msgid "Toggle Breakpoint" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:286 -#: ../../docs/getting_started/editor/default_key_mapping.rst:366 -#: ../../docs/getting_started/editor/default_key_mapping.rst:366 -msgid ":kbd:`F9`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:286 -msgid "``script_text_editor/toggle_breakpoint``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:288 -msgid "Remove All Breakpoints" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:288 -msgid ":kbd:`Ctrl + Shift + F9`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:288 -msgid ":kbd:`Cmd + Shift + F9`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:288 -msgid "``script_text_editor/remove_all_breakpoints``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:290 -msgid "Go to Next Breakpoint" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:290 -msgid ":kbd:`Ctrl + .`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:290 -msgid "``script_text_editor/goto_next_breakpoint``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:292 -msgid "Go to Previous Breakpoint" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:292 -msgid ":kbd:`Ctrl + ,`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:292 -msgid ":kbd:`Cmd + ,`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:292 -msgid "``script_text_editor/goto_previous_breakpoint``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:294 -msgid "Contextual Help" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:294 -msgid ":kbd:`Alt + F1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:294 -msgid ":kbd:`Alt + Shift + Space`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:294 -msgid "``script_text_editor/contextual_help``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:298 -msgid "Script Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:303 -msgid "``script_editor/find``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:305 -msgid "``script_editor/find_next``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:307 -msgid "``script_editor/find_previous``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:309 -msgid "``script_editor/find_in_files``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:311 -#: ../../docs/getting_started/editor/default_key_mapping.rst:311 -msgid ":kbd:`Shift + Alt + Up Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:311 -msgid "``script_editor/window_move_up``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:313 -#: ../../docs/getting_started/editor/default_key_mapping.rst:313 -msgid ":kbd:`Shift + Alt + Down Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:313 -msgid "``script_editor/window_move_down``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:315 -msgid "Next Script" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:315 -msgid ":kbd:`Ctrl + Shift + .`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:315 -msgid ":kbd:`Cmd + Shift + .`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:315 -msgid "``script_editor/next_script``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:317 -msgid "Previous Script" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:317 -msgid ":kbd:`Ctrl + Shift + ,`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:317 -msgid ":kbd:`Cmd + Shift + ,`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:317 -msgid "``script_editor/prev_script``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:319 -msgid "Reopen Closed Script" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:319 -msgid "``script_editor/reopen_closed_script``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:321 -msgid "Save" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:321 -msgid ":kbd:`Ctrl + Alt + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:321 -msgid ":kbd:`Cmd + Alt + S`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:321 -msgid "``script_editor/save``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:323 -msgid "Save All" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:323 -msgid "``script_editor/save_all``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:325 -msgid "Soft Reload Script" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:325 -msgid "``script_editor/reload_script_soft``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:327 -msgid "History Previous" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:327 -#: ../../docs/getting_started/editor/default_key_mapping.rst:327 -#: ../../docs/getting_started/editor/default_key_mapping.rst:399 -#: ../../docs/getting_started/editor/default_key_mapping.rst:399 -msgid ":kbd:`Alt + Left Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:327 -msgid "``script_editor/history_previous``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:329 -msgid "History Next" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:329 -#: ../../docs/getting_started/editor/default_key_mapping.rst:329 -#: ../../docs/getting_started/editor/default_key_mapping.rst:401 -#: ../../docs/getting_started/editor/default_key_mapping.rst:401 -msgid ":kbd:`Alt + Right Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:329 -msgid "``script_editor/history_next``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:331 -msgid "Close" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:331 -msgid ":kbd:`Ctrl + W`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:331 -msgid ":kbd:`Cmd + W`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:331 -msgid "``script_editor/close_file``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:333 -msgid "Run" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:333 -msgid ":kbd:`Ctrl + Shift + X`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:333 -msgid ":kbd:`Cmd + Shift + X`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:333 -msgid "``script_editor/run_file``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:335 -msgid "Toggle Scripts Panel" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:335 -msgid ":kbd:`Ctrl + \\\\`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:335 -msgid ":kbd:`Cmd + \\\\`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:335 -msgid "``script_editor/toggle_scripts_panel``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:337 -msgid "``script_editor/zoom_in``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:339 -msgid "``script_editor/zoom_out``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:341 -msgid "Reset Zoom" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:341 -msgid "``script_editor/reset_zoom``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:345 -msgid "Visual Script Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:350 -msgid "Find Node Type" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:350 -msgid "``visual_script_editor/find_node_type``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:352 -msgid "Copy Nodes" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:352 -msgid "``visual_script_editor/copy_nodes``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:354 -msgid "Cut Nodes" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:354 -msgid "``visual_script_editor/cut_nodes``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:356 -msgid "Paste Nodes" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:356 -msgid "``visual_script_editor/paste_nodes``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:358 -msgid "Delete Selected" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:358 -#: ../../docs/getting_started/editor/default_key_mapping.rst:415 -#: ../../docs/getting_started/editor/default_key_mapping.rst:434 -#: ../../docs/getting_started/editor/default_key_mapping.rst:449 -#: ../../docs/getting_started/editor/default_key_mapping.rst:470 -#: ../../docs/getting_started/editor/default_key_mapping.rst:509 -msgid ":kbd:`Del`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:358 -#: ../../docs/getting_started/editor/default_key_mapping.rst:415 -#: ../../docs/getting_started/editor/default_key_mapping.rst:434 -#: ../../docs/getting_started/editor/default_key_mapping.rst:449 -#: ../../docs/getting_started/editor/default_key_mapping.rst:470 -#: ../../docs/getting_started/editor/default_key_mapping.rst:509 -msgid ":kbd:`Cmd + BkSp`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:358 -msgid "``visual_script_editor/delete_selected``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:360 -msgid "Make Function" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:360 -msgid ":kbd:`Ctrl + G`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:360 -msgid "``visual_script_editor/create_function``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:362 -msgid "Edit Member" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:362 -msgid ":kbd:`Ctrl + E`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:362 -msgid ":kbd:`Cmd + E`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:362 -msgid "``visual_script_editor/edit_member``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:364 -msgid "Refresh Graph" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:364 -msgid "``visual_script_editor/refresh_nodes``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:366 -msgid "``visual_script_editor/toggle_breakpoint``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:370 -msgid "Editor Output" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:375 -#: ../../docs/getting_started/editor/default_key_mapping.rst:507 -msgid "Copy Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:375 -msgid "``editor/copy_output``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:377 -msgid "Clear Output" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:377 -msgid "``editor/clear_output``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:381 -msgid "Debugger" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:386 -msgid "Step Into" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:386 -#: ../../docs/getting_started/editor/default_key_mapping.rst:386 -msgid ":kbd:`F11`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:386 -msgid "``debugger/step_into``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:388 -msgid "Step Over" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:388 -#: ../../docs/getting_started/editor/default_key_mapping.rst:388 -msgid ":kbd:`F10`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:388 -msgid "``debugger/step_over``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:390 -msgid "Continue" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:390 -#: ../../docs/getting_started/editor/default_key_mapping.rst:390 -msgid ":kbd:`F12`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:390 -msgid "``debugger/continue``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:394 -msgid "File Dialog" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:399 -msgid "Go Back" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:399 -msgid "``file_dialog/go_back``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:401 -msgid "Go Forward" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:401 -msgid "``file_dialog/go_forward``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:403 -msgid "Go Up" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:403 -msgid "``file_dialog/go_up``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:405 -msgid "Refresh" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:405 -msgid "``file_dialog/refresh``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:407 -msgid "Toggle Hidden Files" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:407 -msgid ":kbd:`Ctrl + H`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:407 -msgid ":kbd:`Cmd + H`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:407 -msgid "``file_dialog/toggle_hidden_files``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:409 -msgid "Toggle Favorite" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:409 -msgid "``file_dialog/toggle_favorite``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:411 -msgid "Toggle Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:411 -#: ../../docs/getting_started/editor/default_key_mapping.rst:411 -msgid ":kbd:`Alt + V`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:411 -msgid "``file_dialog/toggle_mode``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:413 -msgid "Create Folder" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:413 -msgid ":kbd:`Ctrl + N`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:413 -msgid ":kbd:`Cmd + N`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:413 -msgid "``file_dialog/create_folder``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:415 -#: ../../docs/getting_started/editor/default_key_mapping.rst:434 -#: ../../docs/getting_started/editor/default_key_mapping.rst:449 -msgid "Delete" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:415 -msgid "``file_dialog/delete``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:417 -msgid "Focus Path" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:417 -#: ../../docs/getting_started/editor/default_key_mapping.rst:432 -#: ../../docs/getting_started/editor/default_key_mapping.rst:453 -#: ../../docs/getting_started/editor/default_key_mapping.rst:466 -msgid ":kbd:`Cmd + D`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:417 -msgid "``file_dialog/focus_path``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:419 -msgid "Move Favorite Up" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:419 -#: ../../docs/getting_started/editor/default_key_mapping.rst:455 -msgid ":kbd:`Ctrl + Up Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:419 -#: ../../docs/getting_started/editor/default_key_mapping.rst:455 -msgid ":kbd:`Cmd + Up Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:419 -msgid "``file_dialog/move_favorite_up``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:421 -msgid "Move Favorite Down" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:421 -#: ../../docs/getting_started/editor/default_key_mapping.rst:457 -msgid ":kbd:`Ctrl + Down Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:421 -#: ../../docs/getting_started/editor/default_key_mapping.rst:457 -msgid ":kbd:`Cmd + Down Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:421 -msgid "``file_dialog/move_favorite_down``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:425 -msgid "FileSystem Dock" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:430 -msgid "Copy Path" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:430 -msgid "``filesystem_dock/copy_path``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:432 -#: ../../docs/getting_started/editor/default_key_mapping.rst:453 -msgid "Duplicate" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:432 -msgid "``filesystem_dock/duplicate``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:434 -msgid "``filesystem_dock/delete``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:438 -msgid "Scene Tree Dock" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:443 -msgid "Add Child Node" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:443 -msgid "``scene_tree/add_child_node``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:445 -msgid "Batch Rename" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:445 -msgid ":kbd:`Cmd + F2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:445 -msgid "``scene_tree/batch_rename``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:447 -msgid "Copy Node Path" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:447 -msgid "``scene_tree/copy_node_path``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:449 -msgid "``scene_tree/delete``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:451 -msgid "Force Delete" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:451 -#: ../../docs/getting_started/editor/default_key_mapping.rst:451 -msgid ":kbd:`Shift + Del`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:451 -msgid "``scene_tree/delete_no_confirm``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:453 -msgid "``scene_tree/duplicate``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:455 -msgid "``scene_tree/move_up``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:457 -msgid "``scene_tree/move_down``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:461 -msgid "Animation Track Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:466 -msgid "Duplicate Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:466 -msgid "``animation_editor/duplicate_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:468 -msgid "Duplicate Transposed" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:468 -msgid ":kbd:`Ctrl + Shift + D`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:468 -msgid ":kbd:`Cmd + Shift + D`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:468 -msgid "``animation_editor/duplicate_selection_transposed``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:470 -msgid "Delete Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:470 -msgid "``animation_editor/delete_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:472 -msgid "Go to Next Step" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:472 -msgid ":kbd:`Ctrl + Right Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:472 -msgid ":kbd:`Cmd + Right Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:472 -msgid "``animation_editor/goto_next_step``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:474 -msgid "Go to Previous Step" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:474 -msgid ":kbd:`Ctrl + Left Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:474 -msgid ":kbd:`Cmd + Left Arrow`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:474 -msgid "``animation_editor/goto_prev_step``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:478 -msgid "Tile Map Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:483 -msgid "Find Tile" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:483 -msgid "``tile_map_editor/find_tile``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:485 -msgid "Pick Tile" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:485 -#: ../../docs/getting_started/editor/default_key_mapping.rst:485 -msgid ":kbd:`I`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:485 -msgid "``tile_map_editor/pick_tile``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:487 -msgid "Paint Tile" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:487 -#: ../../docs/getting_started/editor/default_key_mapping.rst:487 -msgid ":kbd:`P`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:487 -msgid "``tile_map_editor/paint_tile``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:489 -msgid "Bucket Fill" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:489 -msgid "``tile_map_editor/bucket_fill``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:491 -msgid "Transpose" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:491 -msgid "``tile_map_editor/transpose``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:493 -msgid "Flip Horizontally" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:493 -#: ../../docs/getting_started/editor/default_key_mapping.rst:493 -msgid ":kbd:`X`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:493 -msgid "``tile_map_editor/flip_horizontal``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:495 -msgid "Flip Vertically" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:495 -#: ../../docs/getting_started/editor/default_key_mapping.rst:495 -msgid ":kbd:`Z`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:495 -msgid "``tile_map_editor/flip_vertical``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:497 -msgid "Rotate Left" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:497 -msgid "``tile_map_editor/rotate_left``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:499 -msgid "Rotate Right" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:499 -msgid "``tile_map_editor/rotate_right``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:501 -msgid "Clear Transform" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:501 -msgid "``tile_map_editor/clear_transform``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:503 -msgid "Select" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:503 -#: ../../docs/getting_started/editor/default_key_mapping.rst:503 -msgid ":kbd:`M`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:503 -msgid "``tile_map_editor/select``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:505 -msgid "Cut Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:505 -msgid "``tile_map_editor/cut_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:507 -msgid "``tile_map_editor/copy_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:509 -msgid "Erase Selection" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:509 -msgid "``tile_map_editor/erase_selection``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:513 -msgid "Tileset Editor" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:518 -msgid "Next Coordinate" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:518 -msgid "``tileset_editor/next_shape``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:520 -msgid "Previous Coordinate" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:520 -#: ../../docs/getting_started/editor/default_key_mapping.rst:520 -msgid ":kbd:`PgUp`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:520 -msgid "``tileset_editor/previous_shape``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:522 -msgid "Region Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:522 -#: ../../docs/getting_started/editor/default_key_mapping.rst:522 -msgid ":kbd:`1`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:522 -msgid "``tileset_editor/editmode_region``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:524 -msgid "Collision Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:524 -#: ../../docs/getting_started/editor/default_key_mapping.rst:524 -msgid ":kbd:`2`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:524 -msgid "``tileset_editor/editmode_collision``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:526 -msgid "Occlusion Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:526 -#: ../../docs/getting_started/editor/default_key_mapping.rst:526 -msgid ":kbd:`3`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:526 -msgid "``tileset_editor/editmode_occlusion``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:528 -msgid "Navigation Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:528 -#: ../../docs/getting_started/editor/default_key_mapping.rst:528 -msgid ":kbd:`4`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:528 -msgid "``tileset_editor/editmode_navigation``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:530 -msgid "Bitmask Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:530 -#: ../../docs/getting_started/editor/default_key_mapping.rst:530 -msgid ":kbd:`5`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:530 -msgid "``tileset_editor/editmode_bitmask``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:532 -msgid "Priority Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:532 -#: ../../docs/getting_started/editor/default_key_mapping.rst:532 -msgid ":kbd:`6`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:532 -msgid "``tileset_editor/editmode_priority``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:534 -msgid "Icon Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:534 -#: ../../docs/getting_started/editor/default_key_mapping.rst:534 -msgid ":kbd:`7`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:534 -msgid "``tileset_editor/editmode_icon``" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:536 -msgid "Z Index Mode" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:536 -#: ../../docs/getting_started/editor/default_key_mapping.rst:536 -msgid ":kbd:`8`" -msgstr "" - -#: ../../docs/getting_started/editor/default_key_mapping.rst:536 -msgid "``tileset_editor/editmode_z_index``" -msgstr "" diff --git a/sphinx/templates/getting_started/editor/external_editor.pot b/sphinx/templates/getting_started/editor/external_editor.pot deleted file mode 100644 index ecc83f3d5e..0000000000 --- a/sphinx/templates/getting_started/editor/external_editor.pot +++ /dev/null @@ -1,129 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/editor/external_editor.rst:4 -msgid "Using an external text editor" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:8 -msgid "`External editors are currently incompatible with Godot's \"Sync Script Changes\" feature. `__" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:10 -msgid "Godot can be used with an external text editor, such as Sublime Text or Visual Studio Code. To enable an external text editor, browse to the relevant editor settings via: ``Editor -> Editor Settings -> Text Editor -> External``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:16 -msgid "There are two fields: the executable path and command line flags. The flags allow you to integrate the editor with Godot, passing it the file path to open and other relevant arguments. Godot will replace the following placeholders in the flags string:" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:22 -msgid "Field in Exec Flags" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:22 -msgid "Is replaced with" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:24 -msgid "``{project}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:24 -msgid "The absolute path to the project directory" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:26 -msgid "``{file}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:26 -msgid "The absolute path to the file" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:28 -msgid "``{col}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:28 -msgid "The column number of the error" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:30 -msgid "``{line}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:30 -msgid "The line number of the error" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:33 -msgid "Some example Exec Flags for various editors include:" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:36 -msgid "Editor" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:36 -msgid "Exec Flags" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:38 -msgid "Geany/Kate" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:38 -msgid "``{file} --line {line} --column {col}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:40 -msgid "Atom/Sublime Text" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:40 -msgid "``{file}:{line}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:42 -msgid "JetBrains Rider" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:42 -msgid "``--line {line} {file}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:44 -msgid "Visual Studio Code" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:44 -msgid "``{project} --goto {file}:{line}:{col}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:46 -msgid "Vim (gVim)" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:46 -msgid "``\"+call cursor({line}, {col})\" {file}``" -msgstr "" - -#: ../../docs/getting_started/editor/external_editor.rst:49 -msgid "For Visual Studio Code you will have to point to the ``code.cmd`` file." -msgstr "" diff --git a/sphinx/templates/getting_started/editor/unity_to_godot.pot b/sphinx/templates/getting_started/editor/unity_to_godot.pot deleted file mode 100644 index 8b4e618089..0000000000 --- a/sphinx/templates/getting_started/editor/unity_to_godot.pot +++ /dev/null @@ -1,441 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:8 -msgid "From Unity to Godot Engine" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:10 -msgid "This guide provides an overview of Godot Engine from the viewpoint of a Unity user, and aims to help you migrate your existing Unity experience into the world of Godot." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:15 -msgid "This article talks about older versions of Unity. Nestable prefabs ('Nested prefabs') were added to Unity 2018.3. Nestable prefabs are analogous to Godot's scenes, and allow a more Godot-like approach to scene organization." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:18 -msgid "Differences" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:21 -msgid "Unity" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:21 -msgid "Godot" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:23 -msgid "License" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:23 -msgid "Proprietary, closed, free license with revenue caps and usage restrictions" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:23 -msgid "MIT license, free and fully open source without any restriction" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:25 -msgid "OS (editor)" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:25 -msgid "Windows, macOS, Linux" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:25 -msgid "Windows, macOS, X11 (Linux, \\*BSD)" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:27 -msgid "OS (export)" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:27 -msgid "**Desktop:** Windows, macOS, Linux" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:28 -msgid "**Mobile:** Android, iOS, Windows Phone, Tizen" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:29 -msgid "**Web:** WebAssembly or asm.js" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:30 -msgid "**Consoles:** PS4, PS Vita, Xbox One, Xbox 360, Wii U, Nintendo 3DS" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:31 -msgid "**VR:** Oculus Rift, SteamVR, Google Cardboard, PlayStation VR, Gear VR, HoloLens" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:32 -msgid "**TV:** Android TV, Samsung SMART TV, tvOS" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:27 -msgid "**Desktop:** Windows, macOS, X11" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:28 -msgid "**Mobile:** Android, iOS" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:29 -msgid "**Web:** WebAssembly" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:30 -msgid "**Console:** See :ref:`doc_consoles`" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:31 -msgid "**VR:** Oculus Rift, SteamVR" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:34 -msgid "Scene system" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:34 -msgid "Component/Scene (GameObject > Component)" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:35 -msgid "Prefabs" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:34 -msgid ":ref:`Scene tree and nodes `, allowing scenes to be nested and/or inherit other scenes" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:37 -msgid "Third-party tools" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:37 -msgid "Visual Studio or VS Code" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:37 -msgid ":ref:`External editors are possible `" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:38 -msgid ":ref:`Android SDK for Android export `" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:40 -msgid "Notable advantages" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:40 -msgid "Huge community" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:41 -msgid "Large assets store" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:40 -msgid "Scene System" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:41 -msgid ":ref:`Animation Pipeline `" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:42 -msgid ":ref:`Easy to write Shaders `" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:43 -msgid "Debug on Device" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:50 -msgid "The editor" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:52 -msgid "Godot Engine provides a rich-featured editor that allows you to build your games. The pictures below display the default layouts of both editors with colored blocks to indicate common functionalities." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:58 -msgid "While both editors may seem similar, there are many differences below the surface. Both let you organize the project using the filesystem, but Godot's approach is simpler with a single configuration file, minimalist text format, and no metadata. This makes Godot more friendly to VCS systems, such as Git, Subversion, or Mercurial." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:63 -msgid "Godot's Scene panel is similar to Unity's Hierarchy panel but, as each node has a specific function, the approach used by Godot is more visually descriptive. It's easier to understand what a scene does at a glance." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:67 -msgid "The Inspector in Godot is more minimal, it shows only properties. Thanks to this, objects can expose more useful parameters to the user without having to hide functionality in language APIs. As a plus, Godot allows animating any of those properties visually. Changing colors, textures, enumerations, or even links to resources in real-time is possible without needing to write code." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:72 -msgid "The Toolbar at the top of the screen is similar in both editors, offering control over project playback. Projects in Godot run in a separate window, rather than inside the editor (but the tree and objects can still be explored in the debugger window)." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:76 -msgid "This approach has several advantages:" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:78 -msgid "Running the project and closing it is fast (Unity has to save, run the project, close the project, and then reload the previous state)." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:79 -msgid "Live editing is a lot more useful because changes done to the editor take effect immediately in the game and are not lost (nor have to be synced) when the game is closed. This allows fantastic workflows, like creating levels while you play them." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:80 -msgid "The editor is more stable because the game runs in a separate process." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:81 -msgid "The running game can be explored from different angles by toggling the \"Camera Override\" button in the editor viewport, which will switch between using the editor view and the game camera view." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:83 -msgid "Finally, Godot's top toolbar includes a menu for remote debugging. These options allow deployment to a device (connected phone, tablet, or browser via HTML5), and debugging/live editing on it after the game is exported." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:88 -msgid "The scene system" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:90 -msgid "This is the most important difference between Unity and Godot and the favorite feature of most Godot users." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:92 -msgid "Working on a 'level' in Unity usually means embedding all the required assets in a scene and linking them together with components and scripts." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:95 -msgid "Godot's scene system is superficially similar to Unity. A 'level' consists of a collection of nodes, each with its own purpose: Sprite, Mesh, Light, etc. However, in Godot the nodes are arranged in a tree. Each node can have multiple children, which makes each a subscene of the main scene. This means you can compose a whole scene with different scenes stored in different files." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:98 -msgid "For example, think of a platformer level. You would compose it with multiple elements:" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:100 -msgid "Bricks" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:101 -msgid "Coins" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:102 -msgid "The player" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:103 -msgid "The enemies" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:105 -msgid "In Unity, you would put all the GameObjects in the scene: the player, multiple instances of enemies, bricks everywhere to form the ground of the level and then multiple instances of coins all over the level. You would then add various components to each element to link them and add logic in the level: For example, you'd add a BoxCollider2D to all the elements of the scene so that they can collide. This principle is different in Godot." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:110 -msgid "In Godot, you would split your whole scene into three separate, smaller scenes, and instance them in the main scene." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:112 -msgid "**A scene for the Player alone.**" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:114 -msgid "Consider the player as an element we'd like to use in different parent scenes (for instance 'level' scenes). In our case, the player element needs at least an AnimatedSprite node. This node contains the sprite textures necessary for various animations (for example, a walking animation)." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:116 -msgid "**A scene for the Enemy.**" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:118 -msgid "An enemy is also an element we'd like to use in several scenes. It's almost the same as the Player node. The only differences are the script (it needs 'AI' routines to generate the enemy's behavior) and the sprite textures used by the AnimatedSprite node." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:122 -msgid "**A Level scene.**" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:124 -msgid "A Level scene is composed of Bricks (for platforms), Coins (for the player to collect) and a number of instances of the Enemy scene. Each instance is a node in the Level scene tree. These instances are separate enemies, which initially have shared behavior and appearance as defined in the Enemy scene. You can set different properties for each Enemy node (to change its color, for example)." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:128 -msgid "4. **A Main scene.** The Main scene would be composed of one root node with 2 children: a Player instance node, and a Level instance node. The root node can be anything, generally a \"root\" type such as \"Node\" which is the most global type, or \"Node2D\" (root type of all 2D-related nodes), \"Spatial\" (root type of all 3D-related nodes) or \"Control\" (root type of all GUI-related nodes)." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:134 -msgid "As you can see, every scene is organized as a tree. The same goes for nodes' properties: you don't *add* a collision component to a node to make it collidable like Unity does. Instead, you make this node a *child* of a new specific node that has collision properties. Godot features various collision types nodes, depending on the usage (see the :ref:`Physics introduction `)." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:139 -msgid "What are the advantages of this system? Wouldn't this system potentially increase the depth of the scene tree? And doesn't Unity already allow you to organize GameObjects by putting them inside empty GameObjects?" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:141 -msgid "Godot's system is closer to the well-known object-oriented paradigm: Godot provides a number of nodes which are not clearly \"Game Objects\", but they provide their children with their own capabilities: this is inheritance." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:142 -msgid "Godot allows the extraction of a subtree of a scene to make it a scene of its own. So if a scene tree gets too deep, it can be split into smaller subtrees. This is better for reusability, as you can include any subtree as a child of any node. Putting multiple GameObjects in an empty GameObject in Unity does not provide the same functionality." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:145 -msgid "Project organization" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:149 -msgid "There is no perfect project architecture. Any architecture can be made to work in either Unity and Godot." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:152 -msgid "However, a common architecture for Unity projects is to have one Assets folder in the root directory that contains various folders, one per type of asset: Audio, Graphics, Models, Materials, Scripts, Scenes, and so on." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:155 -msgid "Since Godot allows splitting scenes into smaller scenes, each scene and subscene existing as a file in the project, we recommend organizing your project a bit differently. This wiki provides a page for this: :ref:`doc_project_organization`." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:160 -msgid "Where are my prefabs?" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:162 -msgid "A prefab as provided by Unity is a 'template' element of the scene. It is reusable, and each instance of the prefab that exists in the scene has an existence of its own, but all of them have the same properties as defined by the prefab." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:166 -msgid "Godot does not provide prefabs as such, but the same functionality is provided by its scene system: The scene system is organized as a tree. Godot allows you to save any subtree of a scene as a scene file. This new scene can then be instanced as many times as you want, as a child of any node. Any change you make to this new, separate scene will be applied to its instances. However, any change you make to the instance will not have any impact on the 'template' scene." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:173 -msgid "To be precise, you can modify the parameters of an instance in the Inspector panel. The nodes that compose this instance are initially locked. You can unlock them if you need to by right-clicking the instance in the Scene tree and selecting \"Editable children\" in the menu. You don't need to do this to add *new* child nodes to this node. Remember that any new children will belong to the instance, not to the 'template' scene on disk. If you want to add new children to every instance of your 'template' scene, then you should add them in the 'template' scene." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:183 -msgid "Glossary correspondence" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:185 -msgid "GameObject -> Node" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:186 -msgid "Add a component -> Inheriting" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:187 -msgid "Prefab -> Reusable Scene file" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:191 -msgid "Scripting: GDScript, C# and Visual Script" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:194 -msgid "Design" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:196 -msgid "Unity supports C#. C# benefits from its integration with Visual Studio and has desirable features such as static typing." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:198 -msgid "Godot provides its own scripting language, :ref:`GDScript ` as well as support for :ref:`Visual Script ` and :ref:`C# `. GDScript borrows its syntax from Python, but is not related to it. If you wonder about the reasoning for a custom scripting language, please read the :ref:`doc_gdscript` and :ref:`doc_faq` pages. GDScript is strongly attached to the Godot API and doesn't take long to learn: Between one evening for an experienced programmer and a week for a complete beginner." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:204 -msgid "Unity allows you to attach as many scripts as you want to a GameObject. Each script adds a behavior to the GameObject: For example, you can attach a script so that it reacts to the player's controls, and another that controls its specific game logic." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:208 -msgid "In Godot, you can only attach one script per node. You can use either an external GDScript file or include the script directly in the node. If you need to attach more scripts to one node, then you may consider two solutions, depending on your scene and on what you want to achieve:" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:212 -msgid "either add a new node between your target node and its current parent, then add a script to this new node." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:213 -msgid "or, you can split your target node into multiple children and attach one script to each of them." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:215 -msgid "As you can see, it can be easy to turn a scene tree to a mess. Consider splitting any complicated scene into multiple, smaller branches." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:218 -msgid "Connections: groups and signals" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:220 -msgid "You can control nodes by accessing them via script and calling built-in or user-defined functions on them. You can also place nodes in a group and call functions on all nodes in this group. See more in the :ref:`scripting documentation `." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:225 -msgid "Nodes can send a signal when a specified action occurs. A signal can be set to call any function. You can define custom signals and specify when they are triggered. See more in the :ref:`signals documentation `." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:230 -msgid "Script serialization" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:232 -msgid "Unity can handle script serialization in two ways:" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:234 -msgid "Implicit: All public fields in a class are automatically serialized if the type is a serializable type (``Dictionary`` is not serializable)." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:235 -msgid "Explicit: Non-public fields can be serialized using the ``[SerializeField]`` attribute." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:237 -msgid "Godot also has a built-in script serialization system, but it works only explicitly. You can serialize any serializable type (:ref:`built-in and various engine types `, including :ref:`class_Array` and :ref:`class_Dictionary`) using the ``export`` keyword. See the :ref:`exports documentation ` for details." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:242 -msgid "Unity also has a data type called ``ScriptableObject`` used to serialize custom asset objects. Its equivalent in Godot is the base class for all resources: :ref:`class_Resource`. Creating a script that inherits :ref:`class_Resource` will allow you to create custom serializable objects. More information about resources can be found :ref:`here `." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:247 -msgid "Using Godot in C++" -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:249 -msgid "Godot allows you to develop your project directly in C++ by using its API, which is not possible with Unity at the moment. As an example, you can consider Godot Engine's editor as a \"game\" written in C++ using the Godot API." -msgstr "" - -#: ../../docs/getting_started/editor/unity_to_godot.rst:252 -msgid "If you are interested in using Godot in C++, you may want to start reading the :ref:`Developing in C++ ` page." -msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/01.project_setup.pot b/sphinx/templates/getting_started/first_2d_game/01.project_setup.pot new file mode 100644 index 0000000000..33468452e5 --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/01.project_setup.pot @@ -0,0 +1,86 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:4 +msgid "Setting up the project" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:6 +msgid "In this short first part, we'll set up and organize the project." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:8 +msgid "Launch Godot and create a new project." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:13 +msgid "GDScript" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:15 +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:22 +msgid "Download :download:`dodge_assets.zip `. The archive contains the images and sounds you'll be using to make the game. Extract the archive and move the ``art/`` and ``fonts/`` directories to your project's directory." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:20 +msgid "C#" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:27 +msgid "Ensure that you have the required dependencies to use C# in Godot. You need the .NET Core 3.1 SDK, and an editor such as VS Code. See :ref:`doc_c_sharp_setup`." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:31 +msgid "GDNative C++" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:33 +msgid "Download :download:`dodge_assets_with_gdnative.zip `. The archive contains the images and sounds you'll be using to make the game. It also contains a starter GDNative project including a ``SConstruct`` file, a ``dodge_the_creeps.gdnlib`` file, a ``player.gdns`` file, and an ``entry.cpp`` file." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:40 +msgid "Ensure that you have the required dependencies to use GDNative C++. You need a C++ compiler such as GCC or Clang or MSVC that supports C++14. On Windows you can download Visual Studio 2019 and select the C++ workload. You also need SCons to use the build system (the SConstruct file). Then you need to `download the Godot C++ bindings `_ and place them in your project." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:47 +msgid "Your project folder should look like this." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:51 +msgid "This game is designed for portrait mode, so we need to adjust the size of the game window. Click on *Project -> Project Settings* to open the project settings window and in the left column, open the *Display -> Window* tab. There, set \"Width\" to ``480`` and \"Height\" to ``720``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:58 +msgid "Also, scroll down to the bottom of the section and, under the \"Stretch\" options, set ``Mode`` to \"2d\" and ``Aspect`` to \"keep\". This ensures that the game scales consistently on different sized screens." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:65 +msgid "Organizing the project" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:67 +msgid "In this project, we will make 3 independent scenes: ``Player``, ``Mob``, and ``HUD``, which we will combine into the game's ``Main`` scene." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:70 +msgid "In a larger project, it might be useful to create folders to hold the various scenes and their scripts, but for this relatively small game, you can save your scenes and scripts in the project's root folder, identified by ``res://``. You can see your project folders in the FileSystem dock in the lower left corner:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/01.project_setup.rst:77 +msgid "With the project in place, we're ready to design the player scene in the next lesson." +msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/02.player_scene.pot b/sphinx/templates/getting_started/first_2d_game/02.player_scene.pot new file mode 100644 index 0000000000..467f223cec --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/02.player_scene.pot @@ -0,0 +1,97 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:4 +msgid "Creating the player scene" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:6 +msgid "With the project settings in place, we can start working on the player-controlled character." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:9 +msgid "The first scene will define the ``Player`` object. One of the benefits of creating a separate Player scene is that we can test it separately, even before we've created other parts of the game." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:14 +msgid "Node structure" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:16 +msgid "To begin, we need to choose a root node for the player object. As a general rule, a scene's root node should reflect the object's desired functionality - what the object *is*. Click the \"Other Node\" button and add an :ref:`Area2D ` node to the scene." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:23 +msgid "Godot will display a warning icon next to the node in the scene tree. You can ignore it for now. We will address it later." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:26 +msgid "With ``Area2D`` we can detect objects that overlap or run into the player. Change the node's name to ``Player`` by double-clicking on it. Now that we've set the scene's root node, we can add additional nodes to give it more functionality." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:31 +msgid "Before we add any children to the ``Player`` node, we want to make sure we don't accidentally move or resize them by clicking on them. Select the node and click the icon to the right of the lock; its tooltip says \"Makes sure the object's children are not selectable.\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:38 +msgid "Save the scene. Click Scene -> Save, or press :kbd:`Ctrl + S` on Windows/Linux or :kbd:`Cmd + S` on macOS." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:41 +msgid "For this project, we will be following the Godot naming conventions." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:43 +msgid "**GDScript**: Classes (nodes) use PascalCase, variables and functions use snake_case, and constants use ALL_CAPS (See :ref:`doc_gdscript_styleguide`)." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:47 +msgid "**C#**: Classes, export variables and methods use PascalCase, private fields use _camelCase, local variables and parameters use camelCase (See :ref:`doc_c_sharp_styleguide`). Be careful to type the method names precisely when connecting signals." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:54 +msgid "Sprite animation" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:56 +msgid "Click on the ``Player`` node and add an :ref:`AnimatedSprite2D ` node as a child. The ``AnimatedSprite`` will handle the appearance and animations for our player. Notice that there is a warning symbol next to the node. An ``AnimatedSprite2D`` requires a :ref:`SpriteFrames ` resource, which is a list of the animations it can display. To create one, find the ``Frames`` property in the Inspector and click \"[empty]\" -> \"New SpriteFrames\". Click again to open the \"SpriteFrames\" panel:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:67 +msgid "On the left is a list of animations. Click the \"default\" one and rename it to \"walk\". Then click the \"New Animation\" button to create a second animation named \"up\". Find the player images in the \"FileSystem\" tab - they're in the ``art`` folder you unzipped earlier. Drag the two images for each animation, named ``playerGrey_up[1/2]`` and ``playerGrey_walk[1/2]``, into the \"Animation Frames\" side of the panel for the corresponding animation:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:76 +msgid "The player images are a bit too large for the game window, so we need to scale them down. Click on the ``AnimatedSprite2D`` node and set the ``Scale`` property to ``(0.5, 0.5)``. You can find it in the Inspector under the ``Node2D`` heading." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:83 +msgid "Finally, add a :ref:`CollisionShape2D ` as a child of ``Player``. This will determine the player's \"hitbox\", or the bounds of its collision area. For this character, a ``CapsuleShape2D`` node gives the best fit, so next to \"Shape\" in the Inspector, click \"[empty]\"\" -> \"New CapsuleShape2D\". Using the two size handles, resize the shape to cover the sprite:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:92 +msgid "When you're finished, your ``Player`` scene should look like this:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:96 +msgid "Make sure to save the scene again after these changes." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/02.player_scene.rst:98 +msgid "In the next part, we'll add a script to the player node to move and animate it. Then, we'll set up collision detection to know when the player got hit by something." +msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/03.coding_the_player.pot b/sphinx/templates/getting_started/first_2d_game/03.coding_the_player.pot new file mode 100644 index 0000000000..e801ace106 --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/03.coding_the_player.pot @@ -0,0 +1,193 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:4 +msgid "Coding the player" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:6 +msgid "In this lesson, we'll add player movement, animation, and set it up to detect collisions." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:9 +msgid "To do so, we need to add some functionality that we can't get from a built-in node, so we'll add a script. Click the ``Player`` node and click the \"Attach Script\" button:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:15 +msgid "In the script settings window, you can leave the default settings alone. Just click \"Create\":" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:18 +msgid "If you're creating a C# script or other languages, select the language from the `language` drop down menu before hitting create." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:23 +msgid "If this is your first time encountering GDScript, please read :ref:`doc_scripting` before continuing." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:26 +msgid "Start by declaring the member variables this object will need:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:86 +msgid "Using the ``export`` keyword on the first variable ``speed`` allows us to set its value in the Inspector. This can be handy for values that you want to be able to adjust just like a node's built-in properties. Click on the ``Player`` node and you'll see the property now appears in the \"Script Variables\" section of the Inspector. Remember, if you change the value here, it will override the value written in the script." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:93 +msgid "If you're using C#, you need to (re)build the project assemblies whenever you want to see new export variables or signals. This build can be manually triggered by clicking the word \"Mono\" at the bottom of the editor window to reveal the Mono Panel, then clicking the \"Build Project\" button." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:101 +msgid "The ``_ready()`` function is called when a node enters the scene tree, which is a good time to find the size of the game window:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:129 +msgid "Now we can use the ``_process()`` function to define what the player will do. ``_process()`` is called every frame, so we'll use it to update elements of our game, which we expect will change often. For the player, we need to do the following:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:134 +msgid "Check for input." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:135 +msgid "Move in the given direction." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:136 +msgid "Play the appropriate animation." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:138 +msgid "First, we need to check for input - is the player pressing a key? For this game, we have 4 direction inputs to check. Input actions are defined in the Project Settings under \"Input Map\". Here, you can define custom events and assign different keys, mouse events, or other inputs to them. For this game, we will just use the default events called \"ui_right\" etc that are assigned to the arrow keys on the keyboard." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:145 +msgid "You can detect whether a key is pressed using ``Input.is_action_pressed()``, which returns ``true`` if it's pressed or ``false`` if it isn't." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:224 +msgid "We start by setting the ``velocity`` to ``(0, 0)`` - by default, the player should not be moving. Then we check each input and add/subtract from the ``velocity`` to obtain a total direction. For example, if you hold ``right`` and ``down`` at the same time, the resulting ``velocity`` vector will be ``(1, 1)``. In this case, since we're adding a horizontal and a vertical movement, the player would move *faster* diagonally than if it just moved horizontally." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:231 +msgid "We can prevent that if we *normalize* the velocity, which means we set its *length* to ``1``, then multiply by the desired speed. This means no more fast diagonal movement." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:235 +msgid "If you've never used vector math before, or need a refresher, you can see an explanation of vector usage in Godot at :ref:`doc_vector_math`. It's good to know but won't be necessary for the rest of this tutorial." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:239 +msgid "We also check whether the player is moving so we can call ``play()`` or ``stop()`` on the AnimatedSprite2D." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:242 +msgid "``$`` is shorthand for ``get_node()``. So in the code above, ``$AnimatedSprite2D.play()`` is the same as ``get_node(\"AnimatedSprite2D\").play()``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:246 +msgid "In GDScript, ``$`` returns the node at the relative path from the current node, or returns ``null`` if the node is not found. Since AnimatedSprite2D is a child of the current node, we can use ``$AnimatedSprite2D``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:251 +msgid "Now that we have a movement direction, we can update the player's position. We can also use ``clamp()`` to prevent it from leaving the screen. *Clamping* a value means restricting it to a given range. Add the following to the bottom of the ``_process`` function (make sure it's not indented under the `else`):" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:279 +msgid "The `delta` parameter in the `_process()` function refers to the *frame length* - the amount of time that the previous frame took to complete. Using this value ensures that your movement will remain consistent even if the frame rate changes." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:284 +msgid "Click \"Play Scene\" (:kbd:`F6`, :kbd:`Cmd + R` on macOS) and confirm you can move the player around the screen in all directions." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:287 +msgid "If you get an error in the \"Debugger\" panel that says" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:289 +msgid "``Attempt to call function 'play' in base 'null instance' on a null instance``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:292 +msgid "this likely means you spelled the name of the AnimatedSprite2D node wrong. Node names are case-sensitive and ``$NodeName`` must match the name you see in the scene tree." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:297 +msgid "Choosing animations" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:299 +msgid "Now that the player can move, we need to change which animation the AnimatedSprite2D is playing based on its direction. We have the \"walk\" animation, which shows the player walking to the right. This animation should be flipped horizontally using the ``flip_h`` property for left movement. We also have the \"up\" animation, which should be flipped vertically with ``flip_v`` for downward movement. Let's place this code at the end of the ``_process()`` function:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:345 +msgid "The boolean assignments in the code above are a common shorthand for programmers. Since we're doing a comparison test (boolean) and also *assigning* a boolean value, we can do both at the same time. Consider this code versus the one-line boolean assignment above:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:369 +msgid "Play the scene again and check that the animations are correct in each of the directions." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:372 +msgid "A common mistake here is to type the names of the animations wrong. The animation names in the SpriteFrames panel must match what you type in the code. If you named the animation ``\"Walk\"``, you must also use a capital \"W\" in the code." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:377 +msgid "When you're sure the movement is working correctly, add this line to ``_ready()``, so the player will be hidden when the game starts:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:394 +msgid "Preparing for collisions" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:396 +msgid "We want ``Player`` to detect when it's hit by an enemy, but we haven't made any enemies yet! That's OK, because we're going to use Godot's *signal* functionality to make it work." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:400 +msgid "Add the following at the top of the script, after ``extends Area2D``:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:429 +msgid "This defines a custom signal called \"hit\" that we will have our player emit (send out) when it collides with an enemy. We will use ``Area2D`` to detect the collision. Select the ``Player`` node and click the \"Node\" tab next to the Inspector tab to see the list of signals the player can emit:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:436 +msgid "Notice our custom \"hit\" signal is there as well! Since our enemies are going to be ``RigidBody2D`` nodes, we want the ``body_entered(body: Node)`` signal. This signal will be emitted when a body contacts the player. Click \"Connect..\" and the \"Connect a Signal\" window appears. We don't need to change any of these settings so click \"Connect\" again. Godot will automatically create a function in your player's script." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:445 +msgid "Note the green icon indicating that a signal is connected to this function. Add this code to the function:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:477 +msgid "Each time an enemy hits the player, the signal is going to be emitted. We need to disable the player's collision so that we don't trigger the ``hit`` signal more than once." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:481 +msgid "Disabling the area's collision shape can cause an error if it happens in the middle of the engine's collision processing. Using ``set_deferred()`` tells Godot to wait to disable the shape until it's safe to do so." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:486 +msgid "The last piece is to add a function we can call to reset the player when starting a new game." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/03.coding_the_player.rst:515 +msgid "With the player working, we'll work on the enemy in the next lesson." +msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/04.creating_the_enemy.pot b/sphinx/templates/getting_started/first_2d_game/04.creating_the_enemy.pot new file mode 100644 index 0000000000..2da28f5686 --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/04.creating_the_enemy.pot @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:4 +msgid "Creating the enemy" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:6 +msgid "Now it's time to make the enemies our player will have to dodge. Their behavior will not be very complex: mobs will spawn randomly at the edges of the screen, choose a random direction, and move in a straight line." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:10 +msgid "We'll create a ``Mob`` scene, which we can then *instance* to create any number of independent mobs in the game." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:14 +msgid "Node setup" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:16 +msgid "Click Scene -> New Scene and add the following nodes:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:18 +msgid ":ref:`RigidBody2D ` (named ``Mob``)" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:20 +msgid ":ref:`AnimatedSprite `" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:21 +msgid ":ref:`CollisionShape2D `" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:22 +msgid ":ref:`VisibilityNotifier2D `" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:24 +msgid "Don't forget to set the children so they can't be selected, like you did with the Player scene." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:27 +msgid "In the :ref:`RigidBody2D ` properties, set ``Gravity Scale`` to ``0``, so the mob will not fall downward. In addition, under the ``PhysicsBody2D`` section, click the ``Mask`` property and uncheck the first box. This will ensure the mobs do not collide with each other." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:34 +msgid "Set up the :ref:`AnimatedSprite ` like you did for the player. This time, we have 3 animations: ``fly``, ``swim``, and ``walk``. There are two images for each animation in the art folder." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:38 +msgid "Adjust the \"Speed (FPS)\" to ``3`` for all animations." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:42 +msgid "Set the ``Playing`` property in the Inspector to \"On\"." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:44 +msgid "We'll select one of these animations randomly so that the mobs will have some variety." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:47 +msgid "Like the player images, these mob images need to be scaled down. Set the ``AnimatedSprite2D``'s ``Scale`` property to ``(0.75, 0.75)``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:50 +msgid "As in the ``Player`` scene, add a ``CapsuleShape2D`` for the collision. To align the shape with the image, you'll need to set the ``Rotation Degrees`` property to ``90`` (under \"Transform\" in the Inspector)." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:54 +msgid "Save the scene." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:57 +msgid "Enemy script" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:59 +msgid "Add a script to the ``Mob`` like this:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:102 +msgid "Now let's look at the rest of the script. In ``_ready()`` we play the animation and randomly choose one of the three animation types:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:140 +msgid "First, we get the list of animation names from the AnimatedSprite2D's ``frames`` property. This returns an Array containing all three animation names: ``[\"walk\", \"swim\", \"fly\"]``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:144 +msgid "We then need to pick a random number between ``0`` and ``2`` to select one of these names from the list (array indices start at ``0``). ``randi() % n`` selects a random integer between ``0`` and ``n-1``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:148 +msgid "You must use ``randomize()`` if you want your sequence of \"random\" numbers to be different every time you run the scene. We're going to use ``randomize()`` in our ``Main`` scene, so we won't need it here." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:152 +msgid "The last piece is to make the mobs delete themselves when they leave the screen. Connect the ``screen_exited()`` signal of the ``VisibilityNotifier2D`` node and add this code:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:176 +msgid "This completes the `Mob` scene." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/04.creating_the_enemy.rst:178 +msgid "With the player and enemies ready, in the next part, we'll bring them together in a new scene. We'll make enemies spawn randomly around the game board and move forward, turning our project into a playable game." +msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/05.the_main_game_scene.pot b/sphinx/templates/getting_started/first_2d_game/05.the_main_game_scene.pot new file mode 100644 index 0000000000..85149f42d7 --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/05.the_main_game_scene.pot @@ -0,0 +1,173 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:4 +msgid "The main game scene" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:6 +msgid "Now it's time to bring everything we did together into a playable game scene." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:8 +msgid "Create a new scene and add a :ref:`Node ` named ``Main``. Ensure you create a Node, **not** a Node2D. Click the \"Instance\" button and select your saved ``Player.tscn``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:14 +msgid "Now, add the following nodes as children of ``Main``, and name them as shown (values are in seconds):" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:17 +msgid ":ref:`Timer ` (named ``MobTimer``) - to control how often mobs spawn" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:19 +msgid ":ref:`Timer ` (named ``ScoreTimer``) - to increment the score every second" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:21 +msgid ":ref:`Timer ` (named ``StartTimer``) - to give a delay before starting" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:23 +msgid ":ref:`Position2D ` (named ``StartPosition``) - to indicate the player's start position" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:26 +msgid "Set the ``Wait Time`` property of each of the ``Timer`` nodes as follows:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:28 +msgid "``MobTimer``: ``0.5``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:29 +msgid "``ScoreTimer``: ``1``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:30 +msgid "``StartTimer``: ``2``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:32 +msgid "In addition, set the ``One Shot`` property of ``StartTimer`` to \"On\" and set ``Position`` of the ``StartPosition`` node to ``(240, 450)``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:36 +msgid "Spawning mobs" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:38 +msgid "The Main node will be spawning new mobs, and we want them to appear at a random location on the edge of the screen. Add a :ref:`Path2D ` node named ``MobPath`` as a child of ``Main``. When you select ``Path2D``, you will see some new buttons at the top of the editor:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:45 +msgid "Select the middle one (\"Add Point\") and draw the path by clicking to add the points at the corners shown. To have the points snap to the grid, make sure \"Use Grid Snap\" and \"Use Snap\" are both selected. These options can be found to the left of the \"Lock\" button, appearing as a magnet next to some dots and intersecting lines, respectively." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:53 +msgid "Draw the path in *clockwise* order, or your mobs will spawn pointing *outwards* instead of *inwards*!" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:58 +msgid "After placing point ``4`` in the image, click the \"Close Curve\" button and your curve will be complete." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:61 +msgid "Now that the path is defined, add a :ref:`PathFollow2D ` node as a child of ``MobPath`` and name it ``MobSpawnLocation``. This node will automatically rotate and follow the path as it moves, so we can use it to select a random position and direction along the path." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:66 +msgid "Your scene should look like this:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:71 +msgid "Main script" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:73 +msgid "Add a script to ``Main``. At the top of the script, we use ``export (PackedScene)`` to allow us to choose the Mob scene we want to instance." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:152 +msgid "We also add a call to ``randomize()`` here so that the random number generator generates different random numbers each time the game is run:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:192 +msgid "Click the ``Main`` node and you will see the ``Mob Scene`` property in the Inspector under \"Script Variables\"." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:195 +msgid "You can assign this property's value in two ways:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:197 +msgid "Drag ``Mob.tscn`` from the \"FileSystem\" panel and drop it in the ``Mob`` property ." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:199 +msgid "Click the down arrow next to \"[empty]\" and choose \"Load\". Select ``Mob.tscn``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:201 +msgid "Next, select the ``Player`` node in the Scene dock, and access the Node dock on the sidebar. Make sure to have the Signals tab selected in the Node dock." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:204 +msgid "You should see a list of the signals for the ``Player`` node. Find and double-click the ``hit`` signal in the list (or right-click it and select \"Connect...\"). This will open the signal connection dialog. We want to make a new function named ``game_over``, which will handle what needs to happen when a game ends. Type \"game_over\" in the \"Receiver Method\" box at the bottom of the signal connection dialog and click \"Connect\". Add the following code to the new function, as well as a ``new_game`` function that will set everything up for a new game:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:258 +msgid "Now connect the ``timeout()`` signal of each of the Timer nodes (``StartTimer``, ``ScoreTimer`` , and ``MobTimer``) to the main script. ``StartTimer`` will start the other two timers. ``ScoreTimer`` will increment the score by 1." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:308 +msgid "In ``_on_MobTimer_timeout()``, we will create a mob instance, pick a random starting location along the ``Path2D``, and set the mob in motion. The ``PathFollow2D`` node will automatically rotate as it follows the path, so we will use that to select the mob's direction as well as its position. When we spawn a mob, we'll pick a random value between ``150.0`` and ``250.0`` for how fast each mob will move (it would be boring if they were all moving at the same speed)." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:316 +msgid "Note that a new instance must be added to the scene using ``add_child()``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:401 +msgid "Why ``PI``? In functions requiring angles, Godot uses *radians*, not degrees. Pi represents a half turn in radians, about ``3.1415`` (there is also ``TAU`` which is equal to ``2 * PI``). If you're more comfortable working with degrees, you'll need to use the ``deg2rad()`` and ``rad2deg()`` functions to convert between the two." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:409 +msgid "Testing the scene" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:411 +msgid "Let's test the scene to make sure everything is working. Add this ``new_game`` call to ``_ready()``:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:435 +msgid "Let's also assign ``Main`` as our \"Main Scene\" - the one that runs automatically when the game launches. Press the \"Play\" button and select ``Main.tscn`` when prompted." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:439 +msgid "You should be able to move the player around, see mobs spawning, and see the player disappear when hit by a mob." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:442 +msgid "When you're sure everything is working, remove the call to ``new_game()`` from ``_ready()``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/05.the_main_game_scene.rst:445 +msgid "What's our game lacking? Some user interface. In the next lesson, we'll add a title screen and display the player's score." +msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/06.heads_up_display.pot b/sphinx/templates/getting_started/first_2d_game/06.heads_up_display.pot new file mode 100644 index 0000000000..b0b620026d --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/06.heads_up_display.pot @@ -0,0 +1,246 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:4 +msgid "Heads up display" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:6 +msgid "The final piece our game needs is a User Interface (UI) to display things like score, a \"game over\" message, and a restart button." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:9 +msgid "Create a new scene, and add a :ref:`CanvasLayer ` node named ``HUD``. \"HUD\" stands for \"heads-up display\", an informational display that appears as an overlay on top of the game view." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:13 +msgid "The :ref:`CanvasLayer ` node lets us draw our UI elements on a layer above the rest of the game, so that the information it displays isn't covered up by any game elements like the player or mobs." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:17 +msgid "The HUD needs to display the following information:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:19 +msgid "Score, changed by ``ScoreTimer``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:20 +msgid "A message, such as \"Game Over\" or \"Get Ready!\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:21 +msgid "A \"Start\" button to begin the game." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:23 +msgid "The basic node for UI elements is :ref:`Control `. To create our UI, we'll use two types of :ref:`Control ` nodes: :ref:`Label ` and :ref:`Button `." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:27 +msgid "Create the following as children of the ``HUD`` node:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:29 +msgid ":ref:`Label ` named ``ScoreLabel``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:30 +msgid ":ref:`Label ` named ``Message``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:31 +msgid ":ref:`Button ` named ``StartButton``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:32 +msgid ":ref:`Timer ` named ``MessageTimer``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:34 +msgid "Click on the ``ScoreLabel`` and type a number into the ``Text`` field in the Inspector. The default font for ``Control`` nodes is small and doesn't scale well. There is a font file included in the game assets called \"Xolonium-Regular.ttf\". To use this font, do the following:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:39 +msgid "Under \"Custom Fonts\", choose \"New Font\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:43 +msgid "Click on the \"Font\" you added, and under \"Font/Data/0\", choose \"Load\" and select the \"Xolonium-Regular.ttf\" file." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:48 +msgid "Once you've done this on the ``ScoreLabel``, you can click the down arrow next to the Font property and choose \"Copy\", then \"Paste\" it in the same place on the other two Control nodes. Set \"Custom Font Size\" property of the ``ScoreLabel``. A setting of ``64`` works well." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:55 +msgid "**Anchors and Margins:** ``Control`` nodes have a position and size, but they also have anchors and margins. Anchors define the origin - the reference point for the edges of the node. Margins update automatically when you move or resize a control node. They represent the distance from the control node's edges to its anchor." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:61 +msgid "Arrange the nodes as shown below. Click the \"Layout\" button to set a Control node's layout:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:66 +msgid "You can drag the nodes to place them manually, or for more precise placement, use the following settings:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:70 +msgid "ScoreLabel" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:72 +msgid "*Layout* : \"Top Wide\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:73 +msgid "*Text* : ``0``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:74 +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:81 +msgid "*Align* : \"Center\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:77 +msgid "Message" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:79 +msgid "*Layout* : \"HCenter Wide\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:80 +msgid "*Text* : ``Dodge the Creeps!``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:82 +msgid "*Autowrap* : \"On\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:85 +msgid "StartButton" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:87 +msgid "*Text* : ``Start``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:88 +msgid "*Layout* : \"Center Bottom\"" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:89 +msgid "*Margin* :" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:91 +msgid "Top: ``-200``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:92 +msgid "Bottom: ``-100``" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:94 +msgid "On the ``MessageTimer``, set the ``Wait Time`` to ``2`` and set the ``One Shot`` property to \"On\"." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:97 +msgid "Now add this script to ``HUD``:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:157 +msgid "The ``start_game`` signal tells the ``Main`` node that the button has been pressed." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:204 +msgid "This function is called when we want to display a message temporarily, such as \"Get Ready\"." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:255 +msgid "This function is called when the player loses. It will show \"Game Over\" for 2 seconds, then return to the title screen and, after a brief pause, show the \"Start\" button." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:259 +msgid "When you need to pause for a brief time, an alternative to using a Timer node is to use the SceneTree's ``create_timer()`` function. This can be very useful to add delays such as in the above code, where we want to wait some time before showing the \"Start\" button." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:284 +msgid "This function is called by ``Main`` whenever the score changes." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:286 +msgid "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` signal of ``StartButton`` and add the following code to the new functions:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:332 +msgid "Connecting HUD to Main" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:334 +msgid "Now that we're done creating the ``HUD`` scene, go back to ``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` scene. The scene tree should look like this, so make sure you didn't miss anything:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:340 +msgid "Now we need to connect the ``HUD`` functionality to our ``Main`` script. This requires a few additions to the ``Main`` scene:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:343 +msgid "In the Node tab, connect the HUD's ``start_game`` signal to the ``new_game()`` function of the Main node by typing \"new_game\" in the \"Receiver Method\" in the \"Connect a Signal\" window. Verify that the green connection icon now appears next to ``func new_game()`` in the script." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:348 +msgid "In ``new_game()``, update the score display and show the \"Get Ready\" message:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:367 +msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:382 +msgid "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in sync with the changing score:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:398 +msgid "Now you're ready to play! Click the \"Play the Project\" button. You will be asked to select a main scene, so choose ``Main.tscn``." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:402 +msgid "Removing old creeps" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:404 +msgid "If you play until \"Game Over\" and then start a new game right away, the creeps from the previous game may still be on the screen. It would be better if they all disappeared at the start of a new game. We just need a way to tell *all* the mobs to remove themselves. We can do this with the \"group\" feature." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:409 +msgid "In the ``Mob`` scene, select the root node and click the \"Node\" tab next to the Inspector (the same place where you find the node's signals). Next to \"Signals\", click \"Groups\" and you can type a new group name and click \"Add\"." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:415 +msgid "Now all mobs will be in the \"mobs\" group. We can then add the following line to the ``new_game()`` function in ``Main``:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:433 +msgid "The ``call_group()`` function calls the named function on every node in a group - in this case we are telling every mob to delete itself." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/06.heads_up_display.rst:436 +msgid "The game's mostly done at this point. In the next and last part, we'll polish it a bit by adding a background, looping music, and some keyboard shortcuts." +msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/07.finishing-up.pot b/sphinx/templates/getting_started/first_2d_game/07.finishing-up.pot new file mode 100644 index 0000000000..48d0b06961 --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/07.finishing-up.pot @@ -0,0 +1,93 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:4 +msgid "Finishing up" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:6 +msgid "We have now completed all the functionality for our game. Below are some remaining steps to add a bit more \"juice\" to improve the game experience." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:9 +msgid "Feel free to expand the gameplay with your own ideas." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:12 +msgid "Background" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:14 +msgid "The default gray background is not very appealing, so let's change its color. One way to do this is to use a :ref:`ColorRect ` node. Make it the first node under ``Main`` so that it will be drawn behind the other nodes. ``ColorRect`` only has one property: ``Color``. Choose a color you like and select \"Layout\" -> \"Full Rect\" so that it covers the screen." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:20 +msgid "You could also add a background image, if you have one, by using a ``TextureRect`` node instead." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:24 +msgid "Sound effects" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:26 +msgid "Sound and music can be the single most effective way to add appeal to the game experience. In your game assets folder, you have two sound files: \"House In a Forest Loop.ogg\" for background music, and \"gameover.wav\" for when the player loses." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:31 +msgid "Add two :ref:`AudioStreamPlayer ` nodes as children of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On each one, click on the ``Stream`` property, select \"Load\", and choose the corresponding audio file." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:36 +msgid "To play the music, add ``$Music.play()`` in the ``new_game()`` function and ``$Music.stop()`` in the ``game_over()`` function." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:39 +msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:42 +msgid "Keyboard shortcut" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:44 +msgid "Since the game is played with keyboard controls, it would be convenient if we could also start the game by pressing a key on the keyboard. We can do this with the \"Shortcut\" property of the ``Button`` node." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:48 +msgid "In the ``HUD`` scene, select the ``StartButton`` and find its *Shortcut* property in the Inspector. Select \"New Shortcut\" and click on the \"Shortcut\" item. A second *Shortcut* property will appear. Select \"New InputEventAction\" and click the new \"InputEventAction\". Finally, in the *Action* property, type the name ``ui_select``. This is the default input event associated with the spacebar." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:57 +msgid "Now when the start button appears, you can either click it or press :kbd:`Space` to start the game." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:60 +msgid "And with that, you completed your first 2D game in Godot." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:64 +msgid "You got to make a player-controlled character, enemies that spawn randomly around the game board, count the score, implement a game over and replay, user interface, sounds, and more. Congratulations!" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:68 +msgid "There's still much to learn, but you can take a moment to appreciate what you achieved." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/07.finishing-up.rst:71 +msgid "And when you're ready, you can move on to :ref:`doc_your_first_3d_game` to learn to create a complete 3D game from scratch, in Godot." +msgstr "" diff --git a/sphinx/templates/getting_started/first_2d_game/index.pot b/sphinx/templates/getting_started/first_2d_game/index.pot new file mode 100644 index 0000000000..bf13963839 --- /dev/null +++ b/sphinx/templates/getting_started/first_2d_game/index.pot @@ -0,0 +1,121 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_2d_game/index.rst:4 +msgid "Your first 2D game" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:6 +msgid "In this step-by-step tutorial series, you will create your first complete 2D game with Godot. By the end of the series, you will have a simple yet complete game of your own, like the image below." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:10 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:12 +msgid "You will learn how the Godot editor works, how to structure a project, and build a 2D game." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:15 +msgid "This project is an introduction to the Godot engine. It assumes that you have some programming experience already. If you're new to programming entirely, you should start here: :ref:`doc_scripting`." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:19 +msgid "The game is called \"Dodge the Creeps!\". Your character must move and avoid the enemies for as long as possible. Here is a preview of the final result:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:22 +msgid "You will learn to:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:24 +msgid "Create a complete 2D game with the Godot editor." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:25 +msgid "Structure a simple game project." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:26 +msgid "Move the player character and change its sprite." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:27 +msgid "Spawn random enemies." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:28 +msgid "Count the score." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:30 +msgid "And more." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:32 +msgid "You'll find another series where you'll create a similar game but in 3D. We recommend you to start with this one, though." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:35 +msgid "**Why start with 2D?**" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:37 +msgid "3D games are much more complex than 2D ones. It would be best if you stuck to 2D until you understood the game development process and how to use Godot well." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:40 +msgid "You can find a completed version of this project at these locations:" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:42 +msgid "https://github.com/kidscancode/Godot3_dodge/releases" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:43 +msgid "https://github.com/godotengine/godot-demo-projects" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:46 +msgid "Prerequisites" +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:48 +msgid "This step-by-step tutorial is intended for beginners who followed the complete :ref:`Getting Started `." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:51 +msgid "If you're an experienced programmer, you can find the complete demo's source code here: `Godot demo projects `__." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:55 +msgid "We prepared some game assets you'll need to download so we can jump straight to the code." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:58 +msgid "You can download them by clicking the link below." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:60 +msgid ":download:`dodge_assets.zip `." +msgstr "" + +#: ../../docs/getting_started/first_2d_game/index.rst:63 +msgid "Contents" +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/01.game_setup.pot b/sphinx/templates/getting_started/first_3d_game/01.game_setup.pot new file mode 100644 index 0000000000..d75110c093 --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/01.game_setup.pot @@ -0,0 +1,201 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:4 +msgid "Setting up the game area" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:6 +msgid "In this first part, we're going to set up the game area. Let's get started by importing the start assets and setting up the game scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:9 +msgid "We've prepared a Godot project with the 3D models and sounds we'll use for this tutorial, linked in the index page. If you haven't done so yet, you can download the archive here: `Squash the Creeps assets `__." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:14 +msgid "Once you downloaded it, extract the .zip archive on your computer. Open the Godot project manager and click the *Import* button." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:17 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:19 +msgid "In the import popup, enter the full path to the freshly created directory ``squash_the_creeps_start/``. You can click the *Browse* button on the right to open a file browser and navigate to the ``project.godot`` file the folder contains." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:24 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:26 +msgid "Click *Import & Edit* to open the project in the editor." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:28 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:30 +msgid "The start project contains an icon and two folders: ``art/`` and ``fonts/``. There, you will find the art assets and music we'll use in the game." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:33 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:35 +msgid "There are two 3D models, ``player.glb`` and ``mob.glb``, some materials that belong to these models, and a music track." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:39 +msgid "Setting up the playable area" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:41 +msgid "We're going to create our main scene with a plain *Node* as its root. In the *Scene* dock, click the *Add Node* button represented by a \"+\" icon in the top-left and double-click on *Node*. Name the node \"Main\". Alternatively, to add a node to the scene, you can press :kbd:`Ctrl + a` (or :kbd:`Cmd + a` on MacOS)." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:46 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:48 +msgid "Save the scene as ``Main.tscn`` by pressing :kbd:`Ctrl + s` (:kbd:`Cmd + s` on MacOS)." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:50 +msgid "We'll start by adding a floor that'll prevent the characters from falling. To create static colliders like the floor, walls, or ceilings, you can use *StaticBody* nodes. They require *CollisionShape* child nodes to define the collision area. With the *Main* node selected, add a *StaticBody* node, then a *CollisionShape*. Rename the *StaticBody* as *Ground*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:56 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:58 +msgid "A warning sign next to the *CollisionShape* appears because we haven't defined its shape. If you click the icon, a popup appears to give you more information." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:61 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:63 +msgid "To create a shape, with the *CollisionShape* selected, head to the *Inspector* and click the *[empty]* field next to the *Shape* property. Create a new *Box Shape*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:67 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:69 +msgid "The box shape is perfect for flat ground and walls. Its thickness makes it reliable to block even fast-moving objects." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:72 +msgid "A box's wireframe appears in the viewport with three orange dots. You can click and drag these to edit the shape's extents interactively. We can also precisely set the size in the inspector. Click on the *BoxShape* to expand the resource. Set its *Extents* to ``30`` on the X axis, ``1`` for the Y axis, and ``30`` for the Z axis." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:78 +msgid "|image9|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:82 +msgid "In 3D, translation and size units are in meters. The box's total size is twice its extents: ``60`` by ``60`` meters on the ground plane and ``2`` units tall. The ground plane is defined by the X and Z axes, while the Y axis represents the height." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:87 +msgid "Collision shapes are invisible. We need to add a visual floor that goes along with it. Select the *Ground* node and add a *MeshInstance* as its child." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:90 +msgid "|image10|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:92 +msgid "In the *Inspector*, click on the field next to *Mesh* and create a *CubeMesh* resource to create a visible cube." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:95 +msgid "|image11|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:97 +msgid "Once again, it's too small by default. Click the cube icon to expand the resource and set its *Size* to ``60``, ``2``, and ``60``. As the cube resource works with a size rather than extents, we need to use these values so it matches our collision shape." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:102 +msgid "|image12|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:104 +msgid "You should see a wide grey slab that covers the grid and blue and red axes in the viewport." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:107 +msgid "We're going to move the ground down so we can see the floor grid. Select the *Ground* node, hold the :kbd:`Ctrl` key down to turn on grid snapping (:kbd:`Cmd` on MacOS), and click and drag down on the Y axis. It's the green arrow in the move gizmo." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:111 +msgid "|image13|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:115 +msgid "If you can't see the 3D object manipulator like on the image above, ensure the *Select Mode* is active in the toolbar above the view." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:118 +msgid "|image14|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:120 +msgid "Move the ground down ``1`` meter. A label in the bottom-left corner of the viewport tells you how much you're translating the node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:123 +msgid "|image15|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:127 +msgid "Moving the *Ground* node down moves both children along with it. Ensure you move the *Ground* node, **not** the *MeshInstance* or the *CollisionShape*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:131 +msgid "Let's add a directional light so our scene isn't all grey. Select the *Main* node and add a *DirectionalLight* as a child of it. We need to move it and rotate it. Move it up by clicking and dragging on the manipulator's green arrow and click and drag on the red arc to rotate it around the X axis, until the ground is lit." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:137 +msgid "In the *Inspector*, turn on *Shadow -> Enabled* by clicking the checkbox." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:139 +msgid "|image16|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:141 +msgid "At this point, your project should look like this." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:143 +msgid "|image17|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/01.game_setup.rst:145 +msgid "That's our starting point. In the next part, we will work on the player scene and base movement." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/02.player_input.pot b/sphinx/templates/getting_started/first_3d_game/02.player_input.pot new file mode 100644 index 0000000000..91a5a494eb --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/02.player_input.pot @@ -0,0 +1,229 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:4 +msgid "Player scene and input actions" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:6 +msgid "In the next two lessons, we will design the player scene, register custom input actions, and code player movement. By the end, you'll have a playable character that moves in eight directions." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:13 +msgid "Create a new scene by going to the Scene menu in the top-left and clicking *New Scene*. Create a *KinematicBody* node as the root and name it *Player*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:16 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:18 +msgid "Kinematic bodies are complementary to the area and rigid bodies used in the 2D game tutorial. Like rigid bodies, they can move and collide with the environment, but instead of being controlled by the physics engine, you dictate their movement. You will see how we use the node's unique features when we code the jump and squash mechanics." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:26 +msgid "To learn more about the different physics node types, see the :ref:`doc_physics_introduction`." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:29 +msgid "For now, we're going to create a basic rig for our character's 3D model. This will allow us to rotate the model later via code while it plays an animation." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:32 +msgid "Add a *Spatial* node as a child of *Player* and name it *Pivot*. Then, in the FileSystem dock, expand the ``art/`` folder by double-clicking it and drag and drop ``player.glb`` onto the *Pivot* node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:36 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:38 +msgid "This should instantiate the model as a child of *Pivot*. You can rename it to *Character*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:41 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:45 +msgid "The ``.glb`` files contain 3D scene data based on the open-source GLTF 2.0 specification. They're a modern and powerful alternative to a proprietary format like FBX, which Godot also supports. To produce these files, we designed the model in `Blender 3D `__ and exported it to GLTF." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:50 +msgid "As with all kinds of physics nodes, we need a collision shape for our character to collide with the environment. Select the *Player* node again and add a *CollisionShape*. In the *Inspector*, assign a *SphereShape* to the *Shape* property. The sphere's wireframe appears below the character." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:55 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:57 +msgid "It will be the shape the physics engine uses to collide with the environment, so we want it to better fit the 3D model. Shrink it a bit by dragging the orange dot in the viewport. My sphere has a radius of about ``0.8`` meters." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:61 +msgid "Then, move the shape up so its bottom roughly aligns with the grid's plane." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:63 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:65 +msgid "You can toggle the model's visibility by clicking the eye icon next to the *Character* or the *Pivot* nodes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:68 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:70 +msgid "Save the scene as ``Player.tscn``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:72 +msgid "With the nodes ready, we can almost get coding. But first, we need to define some input actions." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:76 +msgid "Creating input actions" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:78 +msgid "To move the character, we will listen to the player's input, like pressing the arrow keys. In Godot, while we could write all the key bindings in code, there's a powerful system that allows you to assign a label to a set of keys and buttons. This simplifies our scripts and makes them more readable." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:83 +msgid "This system is the Input Map. To access its editor, head to the *Project* menu and select *Project Settings…*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:86 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:88 +msgid "At the top, there are multiple tabs. Click on *Input Map*. This window allows you to add new actions at the top; they are your labels. In the bottom part, you can bind keys to these actions." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:92 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:94 +msgid "Godot projects come with some predefined actions designed for user interface design, which we could use here. But we're defining our own to support gamepads." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:97 +msgid "We're going to name our actions ``move_left``, ``move_right``, ``move_forward``, ``move_back``, and ``jump``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:100 +msgid "To add an action, write its name in the bar at the top and press Enter." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:102 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:104 +msgid "Create the five actions. Your window should have them all listed at the bottom." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:106 +msgid "|image9|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:108 +msgid "To bind a key or button to an action, click the \"+\" button to its right. Do this for ``move_left`` and in the drop-down menu, click *Key*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:111 +msgid "|image10|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:113 +msgid "This option allows you to add a keyboard input. A popup appears and waits for you to press a key. Press the left arrow key and click *OK*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:116 +msgid "|image11|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:118 +msgid "Do the same for the A key." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:120 +msgid "|image12|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:122 +msgid "Let's now add support for a gamepad's left joystick. Click the \"+\" button again but this time, select *Joy Axis*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:125 +msgid "|image13|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:127 +msgid "The popup gives you two drop-down menus. On the left, you can select a gamepad by index. *Device 0* corresponds to the first plugged gamepad, *Device 1* corresponds to the second, and so on. You can select the joystick and direction you want to bind to the input action on the right. Leave the default values and press the *Add* button." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:133 +msgid "|image14|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:135 +msgid "Do the same for the other input actions. For example, bind the right arrow, D, and the left joystick's right axis to ``move_right``. After binding all keys, your interface should look like this." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:139 +msgid "|image15|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:141 +msgid "We have the ``jump`` action left to set up. Bind the Space key and the gamepad's A button. To bind a gamepad's button, select the *Joy Button* option in the menu." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:144 +msgid "|image16|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:146 +msgid "Leave the default values and click the *Add* button." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:148 +msgid "|image17|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:150 +msgid "Your jump input action should look like this." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:152 +msgid "|image18|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:154 +msgid "That's all the actions we need for this game. You can use this menu to label any groups of keys and buttons in your projects." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/02.player_input.rst:157 +msgid "In the next part, we'll code and test the player's movement." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/03.player_movement_code.pot b/sphinx/templates/getting_started/first_3d_game/03.player_movement_code.pot new file mode 100644 index 0000000000..00ec46f298 --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/03.player_movement_code.pot @@ -0,0 +1,229 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:4 +msgid "Moving the player with code" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:6 +msgid "It's time to code! We're going to use the input actions we created in the last part to move the character." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:9 +msgid "Right-click the *Player* node and select *Attach Script* to add a new script to it. In the popup, set the *Template* to *Empty* before pressing the *Create* button." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:13 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:15 +msgid "Let's start with the class's properties. We're going to define a movement speed, a fall acceleration representing gravity, and a velocity we'll use to move the character." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:48 +msgid "These are common properties for a moving body. The ``velocity`` is a 3D vector combining a speed with a direction. Here, we define it as a property because we want to update and reuse its value across frames." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:54 +msgid "The values are quite different from 2D code because distances are in meters. While in 2D, a thousand units (pixels) may only correspond to half of your screen's width, in 3D, it's a kilometer." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:58 +msgid "Let's code the movement now. We start by calculating the input direction vector using the global ``Input`` object, in ``_physics_process()``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:108 +msgid "Here, we're going to make all calculations using the ``_physics_process()`` virtual function. Like ``_process()``, it allows you to update the node every frame, but it's designed specifically for physics-related code like moving a kinematic or rigid body." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:115 +msgid "To learn more about the difference between ``_process()`` and ``_physics_process()``, see :ref:`doc_idle_and_physics_processing`." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:118 +msgid "We start by initializing a ``direction`` variable to ``Vector3.ZERO``. Then, we check if the player is pressing one or more of the ``move_*`` inputs and update the vector's ``x`` and ``z`` components accordingly. These correspond to the ground plane's axes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:123 +msgid "These four conditions give us eight possibilities and eight possible directions." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:125 +msgid "In case the player presses, say, both W and D simultaneously, the vector will have a length of about ``1.4``. But if they press a single key, it will have a length of ``1``. We want the vector's length to be consistent. To do so, we can call its ``normalize()`` method." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:153 +msgid "Here, we only normalize the vector if the direction has a length greater than zero, which means the player is pressing a direction key." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:156 +msgid "In this case, we also get the *Pivot* node and call its ``look_at()`` method. This method takes a position in space to look at in global coordinates and the up direction. In this case, we can use the ``Vector3.UP`` constant." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:162 +msgid "A node's local coordinates, like ``translation``, are relative to their parent. Global coordinates are relative to the world's main axes you can see in the viewport instead." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:166 +msgid "In 3D, the property that contains a node's position is ``translation``. By adding the ``direction`` to it, we get a position to look at that's one meter away from the *Player*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:170 +msgid "Then, we update the velocity. We have to calculate the ground velocity and the fall speed separately. Be sure to go back one tab so the lines are inside the ``_physics_process()`` function but outside the condition we just wrote." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:205 +msgid "For the vertical velocity, we subtract the fall acceleration multiplied by the delta time every frame. Notice the use of the ``-=`` operator, which is a shorthand for ``variable = variable - ...``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:209 +msgid "This line of code will cause our character to fall in every frame. This may seem strange if it's already on the floor. But we have to do this for the character to collide with the ground every frame." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:213 +msgid "The physics engine can only detect interactions with walls, the floor, or other bodies during a given frame if movement and collisions happen. We will use this property later to code the jump." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:217 +msgid "On the last line, we call ``KinematicBody.move_and_slide()``. It's a powerful method of the ``KinematicBody`` class that allows you to move a character smoothly. If it hits a wall midway through a motion, the engine will try to smooth it out for you." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:222 +msgid "The function takes two parameters: our velocity and the up direction. It moves the character and returns a leftover velocity after applying collisions. When hitting the floor or a wall, the function will reduce or reset the speed in that direction from you. In our case, storing the function's returned value prevents the character from accumulating vertical momentum, which could otherwise get so big the character would move through the ground slab after a while." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:229 +msgid "And that's all the code you need to move the character on the floor." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:231 +msgid "Here is the complete ``Player.gd`` code for reference." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:322 +msgid "Testing our player's movement" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:324 +msgid "We're going to put our player in the *Main* scene to test it. To do so, we need to instantiate the player and then add a camera. Unlike in 2D, in 3D, you won't see anything if your viewport doesn't have a camera pointing at something." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:328 +msgid "Save your *Player* scene and open the *Main* scene. You can click on the *Main* tab at the top of the editor to do so." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:331 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:333 +msgid "If you closed the scene before, head to the *FileSystem* dock and double-click ``Main.tscn`` to re-open it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:336 +msgid "To instantiate the *Player*, right-click on the *Main* node and select *Instance Child Scene*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:339 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:341 +msgid "In the popup, double-click *Player.tscn*. The character should appear in the center of the viewport." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:345 +msgid "Adding a camera" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:347 +msgid "Let's add the camera next. Like we did with our *Player*\\ 's *Pivot*, we're going to create a basic rig. Right-click on the *Main* node again and select *Add Child Node* this time. Create a new *Position3D*, name it *CameraPivot*, and add a *Camera* node as a child of it. Your scene tree should look like this." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:352 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:354 +msgid "Notice the *Preview* checkbox that appears in the top-left when you have the *Camera* selected. You can click it to preview the in-game camera projection." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:357 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:359 +msgid "We're going to use the *Pivot* to rotate the camera as if it was on a crane. Let's first split the 3D view to be able to freely navigate the scene and see what the camera sees." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:363 +msgid "In the toolbar right above the viewport, click on *View*, then *2 Viewports*. You can also press :kbd:`Ctrl + 2` (:kbd:`Cmd + 2` on MacOS)." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:366 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:368 +msgid "On the bottom view, select the *Camera* and turn on camera preview by clicking the checkbox." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:371 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:373 +msgid "In the top view, move the camera about ``19`` units on the Z axis (the blue one)." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:376 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:378 +msgid "Here's where the magic happens. Select the *CameraPivot* and rotate it ``45`` degrees around the X axis (using the red circle). You'll see the camera move as if it was attached to a crane." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:382 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:384 +msgid "You can run the scene by pressing :kbd:`F6` and press the arrow keys to move the character." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:387 +msgid "|image9|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:389 +msgid "We can see some empty space around the character due to the perspective projection. In this game, we're going to use an orthographic projection instead to better frame the gameplay area and make it easier for the player to read distances." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:394 +msgid "Select the *Camera* again and in the *Inspector*, set the *Projection* to *Orthogonal* and the *Size* to ``19``. The character should now look flatter and the ground should fill the background." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:398 +msgid "|image10|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/03.player_movement_code.rst:400 +msgid "With that, we have both player movement and the view in place. Next, we will work on the monsters." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/04.mob_scene.pot b/sphinx/templates/getting_started/first_3d_game/04.mob_scene.pot new file mode 100644 index 0000000000..79021aea32 --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/04.mob_scene.pot @@ -0,0 +1,201 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:4 +msgid "Designing the mob scene" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:6 +msgid "In this part, you're going to code the monsters, which we'll call mobs. In the next lesson, we'll spawn them randomly around the playable area." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:9 +msgid "Let's design the monsters themselves in a new scene. The node structure is going to be similar to the *Player* scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:12 +msgid "Create a scene with, once again, a *KinematicBody* node as its root. Name it *Mob*. Add a *Spatial* node as a child of it, name it *Pivot*. And drag and drop the file ``mob.glb`` from the *FileSystem* dock onto the *Pivot* to add the monster's 3D model to the scene. You can rename the newly created *mob* node into *Character*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:18 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:20 +msgid "We need a collision shape for our body to work. Right-click on the *Mob* node, the scene's root, and click *Add Child Node*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:23 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:25 +msgid "Add a *CollisionShape*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:27 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:29 +msgid "In the *Inspector*, assign a *BoxShape* to the *Shape* property." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:31 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:33 +msgid "We should change its size to fit the 3D model better. You can do so interactively by clicking and dragging on the orange dots." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:36 +msgid "The box should touch the floor and be a little thinner than the model. Physics engines work in such a way that if the player's sphere touches even the box's corner, a collision will occur. If the box is a little too big compared to the 3D model, you may die at a distance from the monster, and the game will feel unfair to the players." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:42 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:44 +msgid "Notice that my box is taller than the monster. It is okay in this game because we're looking at the scene from above and using a fixed perspective. Collision shapes don't have to match the model exactly. It's the way the game feels when you test it that should dictate their form and size." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:50 +msgid "Removing monsters off-screen" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:52 +msgid "We're going to spawn monsters at regular time intervals in the game level. If we're not careful, their count could increase to infinity, and we don't want that. Each mob instance has both a memory and a processing cost, and we don't want to pay for it when the mob's outside the screen." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:57 +msgid "Once a monster leaves the screen, we don't need it anymore, so we can delete it. Godot has a node that detects when objects leave the screen, *VisibilityNotifier*, and we're going to use it to destroy our mobs." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:63 +msgid "When you keep instancing an object in games, there's a technique you can use to avoid the cost of creating and destroying instances all the time called pooling. It consists of pre-creating an array of objects and reusing them over and over." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:68 +msgid "When working with GDScript, you don't need to worry about this. The main reason to use pools is to avoid freezes with garbage-collected languages like C# or Lua. GDScript uses a different technique to manage memory, reference counting, which doesn't have that caveat. You can learn more about that here :ref:`doc_gdscript_basics_memory_management`." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:74 +msgid "Select the *Mob* node and add a *VisibilityNotifier* as a child of it. Another box, pink this time, appears. When this box completely leaves the screen, the node will emit a signal." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:78 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:80 +msgid "Resize it using the orange dots until it covers the entire 3D model." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:82 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:85 +msgid "Coding the mob's movement" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:87 +msgid "Let's implement the monster's motion. We're going to do this in two steps. First, we'll write a script on the *Mob* that defines a function to initialize the monster. We'll then code the randomized spawn mechanism in the *Main* scene and call the function from there." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:92 +msgid "Attach a script to the *Mob*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:94 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:96 +msgid "Here's the movement code to start with. We define two properties, ``min_speed`` and ``max_speed``, to define a random speed range. We then define and initialize the ``velocity``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:137 +msgid "Similarly to the player, we move the mob every frame by calling ``KinematicBody``\\ 's ``move_and_slide()`` method. This time, we don't update the ``velocity`` every frame: we want the monster to move at a constant speed and leave the screen, even if it were to hit an obstacle." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:142 +msgid "We need to define another function to calculate the start velocity. This function will turn the monster towards the player and randomize both its angle of motion and its velocity." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:146 +msgid "The function will take a ``start_position``, the mob's spawn position, and the ``player_position`` as its arguments." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:149 +msgid "We first position the mob at ``start_position``. Then, we turn it towards the player using the ``look_at()`` method and randomize the angle by rotating a random amount around the Y axis. Below, ``rand_range()`` outputs a random value between ``-PI / 4`` radians and ``PI / 4`` radians." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:177 +msgid "We then calculate a random speed using ``rand_range()`` once again and we use it to calculate the velocity." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:180 +msgid "We start by creating a 3D vector pointing forward, multiply it by our ``random_speed``, and finally rotate it using the ``Vector3`` class's ``rotated()`` method." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:212 +msgid "Leaving the screen" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:214 +msgid "We still have to destroy the mobs when they leave the screen. To do so, we'll connect our *VisibilityNotifier* node's ``screen_exited`` signal to the *Mob*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:217 +msgid "Head back to the 3D viewport by clicking on the *3D* label at the top of the editor. You can also press :kbd:`Ctrl + F2` (:kbd:`Alt + 2` on macOS)." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:220 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:222 +msgid "Select the *VisibilityNotifier* node and on the right side of the interface, navigate to the *Node* dock. Double-click the *screen_exited()* signal." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:225 +msgid "|image9|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:227 +msgid "Connect the signal to the *Mob*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:229 +msgid "|image10|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:231 +msgid "This will take you back to the script editor and add a new function for you, ``_on_VisibilityNotifier_screen_exited()``. From it, call the ``queue_free()`` method. This will destroy the mob instance when the *VisibilityNotifier* \\'s box leaves the screen." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:251 +msgid "Our monster is ready to enter the game! In the next part, you will spawn monsters in the game level." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/04.mob_scene.rst:254 +msgid "Here is the complete ``Mob.gd`` script for reference." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/05.spawning_mobs.pot b/sphinx/templates/getting_started/first_3d_game/05.spawning_mobs.pot new file mode 100644 index 0000000000..f38399c30e --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/05.spawning_mobs.pot @@ -0,0 +1,341 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:4 +msgid "Spawning monsters" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:6 +msgid "In this part, we're going to spawn monsters along a path randomly. By the end, you will have monsters roaming the game board." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:9 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:11 +msgid "Double-click on ``Main.tscn`` in the *FileSystem* dock to open the *Main* scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:13 +msgid "Before drawing the path, we're going to change the game resolution. Our game has a default window size of ``1024x600``. We're going to set it to ``720x540``, a nice little box." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:17 +msgid "Go to *Project -> Project Settings*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:19 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:21 +msgid "In the left menu, navigate down to *Display -> Window*. On the right, set the *Width* to ``720`` and the *Height* to ``540``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:24 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:27 +msgid "Creating the spawn path" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:29 +msgid "Like you did in the 2D game tutorial, you're going to design a path and use a *PathFollow* node to sample random locations on it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:32 +msgid "In 3D though, it's a bit more complicated to draw the path. We want it to be around the game view so monsters appear right outside the screen. But if we draw a path, we won't see it from the camera preview." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:36 +msgid "To find the view's limits, we can use some placeholder meshes. Your viewport should still be split into two parts, with the camera preview at the bottom. If that isn't the case, press :kbd:`Ctrl + 2` (:kbd:`Cmd + 2` on MacOS) to split the view into two. Select the *Camera* node and click the *Preview* checkbox in the bottom viewport." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:42 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:45 +msgid "Adding placeholder cylinders" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:47 +msgid "Let's add the placeholder meshes. Add a new *Spatial* node as a child of the *Main* node and name it *Cylinders*. We'll use it to group the cylinders. As a child of it, add a *MeshInstance* node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:51 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:53 +msgid "In the *Inspector*, assign a *CylinderMesh* to the *Mesh* property." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:55 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:57 +msgid "Set the top viewport to the top orthogonal view using the menu in the viewport's top-left corner. Alternatively, you can press the keypad's 7 key." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:60 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:62 +msgid "The grid is a bit distracting for me. You can toggle it by going to the *View* menu in the toolbar and clicking *View Grid*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:65 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:67 +msgid "You now want to move the cylinder along the ground plane, looking at the camera preview in the bottom viewport. I recommend using grid snap to do so. You can toggle it by clicking the magnet icon in the toolbar or pressing Y." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:71 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:73 +msgid "Place the cylinder so it's right outside the camera's view in the top-left corner." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:76 +msgid "|image9|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:78 +msgid "We're going to create copies of the mesh and place them around the game area. Press :kbd:`Ctrl + D` (:kbd:`Cmd + D` on MacOS) to duplicate the node. You can also right-click the node in the *Scene* dock and select *Duplicate*. Move the copy down along the blue Z axis until it's right outside the camera's preview." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:83 +msgid "Select both cylinders by pressing the :kbd:`Shift` key and clicking on the unselected one and duplicate them." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:86 +msgid "|image10|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:88 +msgid "Move them to the right by dragging the red X axis." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:90 +msgid "|image11|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:92 +msgid "They're a bit hard to see in white, aren't they? Let's make them stand out by giving them a new material." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:95 +msgid "In 3D, materials define a surface's visual properties like its color, how it reflects light, and more. We can use them to change the color of a mesh." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:98 +msgid "We can update all four cylinders at once. Select all the mesh instances in the *Scene* dock. To do so, you can click on the first one and Shift click on the last one." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:102 +msgid "|image12|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:104 +msgid "In the *Inspector*, expand the *Material* section and assign a *SpatialMaterial* to slot *0*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:107 +msgid "|image13|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:109 +msgid "Click the sphere icon to open the material resource. You get a preview of the material and a long list of sections filled with properties. You can use these to create all sorts of surfaces, from metal to rock or water." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:113 +msgid "Expand the *Albedo* section and set the color to something that contrasts with the background, like a bright orange." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:116 +msgid "|image14|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:118 +msgid "We can now use the cylinders as guides. Fold them in the *Scene* dock by clicking the grey arrow next to them. Moving forward, you can also toggle their visibility by clicking the eye icon next to *Cylinders*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:122 +msgid "|image15|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:124 +msgid "Add a *Path* node as a child of *Main*. In the toolbar, four icons appear. Click the *Add Point* tool, the icon with the green \"+\" sign." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:127 +msgid "|image16|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:129 +msgid "You can hover any icon to see a tooltip describing the tool." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:131 +msgid "Click in the center of each cylinder to create a point. Then, click the *Close Curve* icon in the toolbar to close the path. If any point is a bit off, you can click and drag on it to reposition it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:135 +msgid "|image17|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:137 +msgid "Your path should look like this." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:139 +msgid "|image18|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:141 +msgid "To sample random positions on it, we need a *PathFollow* node. Add a *PathFollow* as a child of the *Path*. Rename the two nodes to *SpawnPath* and *SpawnLocation*, respectively. It's more descriptive of what we'll use them for." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:145 +msgid "|image19|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:147 +msgid "With that, we're ready to code the spawn mechanism." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:150 +msgid "Spawning monsters randomly" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:152 +msgid "Right-click on the *Main* node and attach a new script to it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:154 +msgid "We first export a variable to the *Inspector* so that we can assign ``Mob.tscn`` or any other monster to it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:157 +msgid "Then, as we're going to spawn the monsters procedurally, we want to randomize numbers every time we play the game. If we don't do that, the monsters will always spawn following the same sequence." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:190 +msgid "We want to spawn mobs at regular time intervals. To do this, we need to go back to the scene and add a timer. Before that, though, we need to assign the ``Mob.tscn`` file to the ``mob_scene`` property." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:194 +msgid "Head back to the 3D screen and select the *Main* node. Drag ``Mob.tscn`` from the *FileSystem* dock to the *Mob Scene* slot in the *Inspector*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:197 +msgid "|image20|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:199 +msgid "Add a new *Timer* node as a child of *Main*. Name it *MobTimer*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:201 +msgid "|image21|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:203 +msgid "In the *Inspector*, set its *Wait Time* to ``0.5`` seconds and turn on *Autostart* so it automatically starts when we run the game." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:206 +msgid "|image22|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:208 +msgid "Timers emit a ``timeout`` signal every time they reach the end of their *Wait Time*. By default, they restart automatically, emitting the signal in a cycle. We can connect to this signal from the *Main* node to spawn monsters every ``0.5`` seconds." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:213 +msgid "With the *MobTimer* still selected, head to the *Node* dock on the right and double-click the ``timeout`` signal." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:216 +msgid "|image23|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:218 +msgid "Connect it to the *Main* node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:220 +msgid "|image24|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:222 +msgid "This will take you back to the script, with a new empty ``_on_MobTimer_timeout()`` function." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:225 +msgid "Let's code the mob spawning logic. We're going to:" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:227 +msgid "Instantiate the mob scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:228 +msgid "Sample a random position on the spawn path." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:229 +msgid "Get the player's position." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:230 +msgid "Add the mob as a child of the *Main* node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:231 +msgid "Call the mob's ``initialize()`` method, passing it the random position and the player's position." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:272 +msgid "Above, ``randf()`` produces a random value between ``0`` and ``1``, which is what the *PathFollow* node's ``unit_offset`` expects." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:275 +msgid "Here is the complete ``Main.gd`` script so far, for reference." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:327 +msgid "You can test the scene by pressing :kbd:`F6`. You should see the monsters spawn and move in a straight line." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:330 +msgid "|image25|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/05.spawning_mobs.rst:332 +msgid "For now, they bump and slide against one another when their paths cross. We'll address this in the next part." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/06.jump_and_squash.pot b/sphinx/templates/getting_started/first_3d_game/06.jump_and_squash.pot new file mode 100644 index 0000000000..8f707f44bd --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/06.jump_and_squash.pot @@ -0,0 +1,281 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:4 +msgid "Jumping and squashing monsters" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:6 +msgid "In this part, we'll add the ability to jump, to squash the monsters. In the next lesson, we'll make the player die when a monster hits them on the ground." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:9 +msgid "First, we have to change a few settings related to physics interactions. Enter the world of :ref:`physics layers `." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:14 +msgid "Controlling physics interactions" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:16 +msgid "Physics bodies have access to two complementary properties: layers and masks. Layers define on which physics layer(s) an object is." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:19 +msgid "Masks control the layers that a body will listen to and detect. This affects collision detection. When you want two bodies to interact, you need at least one to have a mask corresponding to the other." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:23 +msgid "If that's confusing, don't worry, we'll see three examples in a second." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:25 +msgid "The important point is that you can use layers and masks to filter physics interactions, control performance, and remove the need for extra conditions in your code." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:29 +msgid "By default, all physics bodies and areas are set to both layer and mask ``0``. This means they all collide with each other." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:32 +msgid "Physics layers are represented by numbers, but we can give them names to keep track of what's what." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:36 +msgid "Setting layer names" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:38 +msgid "Let's give our physics layers a name. Go to *Project -> Project Settings*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:40 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:42 +msgid "In the left menu, navigate down to *Layer Names -> 3D Physics*. You can see a list of layers with a field next to each of them on the right. You can set their names there. Name the first three layers *player*, *enemies*, and *world*, respectively." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:47 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:49 +msgid "Now, we can assign them to our physics nodes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:52 +msgid "Assigning layers and masks" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:54 +msgid "In the *Main* scene, select the *Ground* node. In the *Inspector*, expand the *Collision* section. There, you can see the node's layers and masks as a grid of buttons." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:58 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:60 +msgid "The ground is part of the world, so we want it to be part of the third layer. Click the lit button to toggle off the first *Layer* and toggle on the third one. Then, toggle off the *Mask* by clicking on it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:64 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:66 +msgid "As I mentioned above, the *Mask* property allows a node to listen to interaction with other physics objects, but we don't need it to have collisions. The *Ground* doesn't need to listen to anything; it's just there to prevent creatures from falling." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:71 +msgid "Note that you can click the \"...\" button on the right side of the properties to see a list of named checkboxes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:74 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:76 +msgid "Next up are the *Player* and the *Mob*. Open ``Player.tscn`` by double-clicking the file in the *FileSystem* dock." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:79 +msgid "Select the *Player* node and set its *Collision -> Mask* to both \"enemies\" and \"world\". You can leave the default *Layer* property as the first layer is the \"player\" one." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:83 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:85 +msgid "Then, open the *Mob* scene by double-clicking on ``Mob.tscn`` and select the *Mob* node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:88 +msgid "Set its *Collision -> Layer* to \"enemies\" and unset its *Collision -> Mask*, leaving the mask empty." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:91 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:93 +msgid "These settings mean the monsters will move through one another. If you want the monsters to collide with and slide against each other, turn on the \"enemies\" mask." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:99 +msgid "The mobs don't need to mask the \"world\" layer because they only move on the XZ plane. We don't apply any gravity to them by design." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:103 +msgid "Jumping" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:105 +msgid "The jumping mechanic itself requires only two lines of code. Open the *Player* script. We need a value to control the jump's strength and update ``_physics_process()`` to code the jump." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:109 +msgid "After the line that defines ``fall_acceleration``, at the top of the script, add the ``jump_impulse``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:128 +msgid "Inside ``_physics_process()``, add the following code before the line where we called ``move_and_slide()``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:158 +msgid "That's all you need to jump!" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:160 +msgid "The ``is_on_floor()`` method is a tool from the ``KinematicBody`` class. It returns ``true`` if the body collided with the floor in this frame. That's why we apply gravity to the *Player*: so we collide with the floor instead of floating over it like the monsters." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:165 +msgid "If the character is on the floor and the player presses \"jump\", we instantly give them a lot of vertical speed. In games, you really want controls to be responsive and giving instant speed boosts like these, while unrealistic, feel great." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:170 +msgid "Notice that the Y axis is positive upwards. That's unlike 2D, where the Y axis is positive downward." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:174 +msgid "Squashing monsters" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:176 +msgid "Let's add the squash mechanic next. We're going to make the character bounce over monsters and kill them at the same time." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:179 +msgid "We need to detect collisions with a monster and to differentiate them from collisions with the floor. To do so, we can use Godot's :ref:`group ` tagging feature." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:183 +msgid "Open the scene ``Mob.tscn`` again and select the *Mob* node. Go to the *Node* dock on the right to see a list of signals. The *Node* dock has two tabs: *Signals*, which you've already used, and *Groups*, which allows you to assign tags to nodes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:188 +msgid "Click on it to reveal a field where you can write a tag name. Enter \"mob\" in the field and click the *Add* button." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:191 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:193 +msgid "An icon appears in the *Scene* dock to indicate the node is part of at least one group." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:196 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:198 +msgid "We can now use the group from the code to distinguish collisions with monsters from collisions with the floor." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:202 +msgid "Coding the squash mechanic" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:204 +msgid "Head back to the *Player* script to code the squash and bounce." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:206 +msgid "At the top of the script, we need another property, ``bounce_impulse``. When squashing an enemy, we don't necessarily want the character to go as high up as when jumping." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:225 +msgid "Then, at the bottom of ``_physics_process()``, add the following loop. With ``move_and_slide()``, Godot makes the body move sometimes multiple times in a row to smooth out the character's motion. So we have to loop over all collisions that may have happened." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:230 +msgid "In every iteration of the loop, we check if we landed on a mob. If so, we kill it and bounce." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:233 +msgid "With this code, if no collisions occurred on a given frame, the loop won't run." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:276 +msgid "That's a lot of new functions. Here's some more information about them." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:278 +msgid "The functions ``get_slide_count()`` and ``get_slide_collision()`` both come from the :ref:`KinematicBody` class and are related to ``move_and_slide()``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:282 +msgid "``get_slide_collision()`` returns a :ref:`KinematicCollision` object that holds information about where and how the collision occurred. For example, we use its ``collider`` property to check if we collided with a \"mob\" by calling ``is_in_group()`` on it: ``collision.collider.is_in_group(\"mob\")``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:290 +msgid "The method ``is_in_group()`` is available on every :ref:`Node`." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:292 +msgid "To check that we are landing on the monster, we use the vector dot product: ``Vector3.UP.dot(collision.normal) > 0.1``. The collision normal is a 3D vector that is perpendicular to the plane where the collision occurred. The dot product allows us to compare it to the up direction." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:297 +msgid "With dot products, when the result is greater than ``0``, the two vectors are at an angle of fewer than 90 degrees. A value higher than ``0.1`` tells us that we are roughly above the monster." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:301 +msgid "We are calling one undefined function, ``mob.squash()``. We have to add it to the Mob class." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:304 +msgid "Open the script ``Mob.gd`` by double-clicking on it in the *FileSystem* dock. At the top of the script, we want to define a new signal named ``squashed``. And at the bottom, you can add the squash function, where we emit the signal and destroy the mob." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:338 +msgid "We will use the signal to add points to the score in the next lesson." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:340 +msgid "With that, you should be able to kill monsters by jumping on them. You can press :kbd:`F5` to try the game and set ``Main.tscn`` as your project's main scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/06.jump_and_squash.rst:343 +msgid "However, the player won't die yet. We'll work on that in the next part." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/07.killing_player.pot b/sphinx/templates/getting_started/first_3d_game/07.killing_player.pot new file mode 100644 index 0000000000..74cd848e6b --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/07.killing_player.pot @@ -0,0 +1,153 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:4 +msgid "Killing the player" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:6 +msgid "We can kill enemies by jumping on them, but the player still can't die. Let's fix this." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:9 +msgid "We want to detect being hit by an enemy differently from squashing them. We want the player to die when they're moving on the floor, but not if they're in the air. We could use vector math to distinguish the two kinds of collisions. Instead, though, we will use an *Area* node, which works well for hitboxes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:16 +msgid "Hitbox with the Area node" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:18 +msgid "Head back to the *Player* scene and add a new *Area* node. Name it *MobDetector*. Add a *CollisionShape* node as a child of it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:21 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:23 +msgid "In the *Inspector*, assign a cylinder shape to it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:25 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:27 +msgid "Here is a trick you can use to make the collisions only happen when the player is on the ground or close to it. You can reduce the cylinder's height and move it up to the top of the character. This way, when the player jumps, the shape will be too high up for the enemies to collide with it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:33 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:35 +msgid "You also want the cylinder to be wider than the sphere. This way, the player gets hit before colliding and being pushed on top of the monster's collision box." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:39 +msgid "The wider the cylinder, the more easily the player will get killed." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:41 +msgid "Next, select the *MobDetector* node again, and in the *Inspector*, turn off its *Monitorable* property. This makes it so other physics nodes cannot detect the area. The complementary *Monitoring* property allows it to detect collisions. Then, remove the *Collision -> Layer* and sets the mask to the \"enemies\" layer." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:47 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:49 +msgid "When areas detect a collision, they emit signals. We're going to connect one to the *Player* node. In the *Node* tab, double-click the ``body_entered`` signal and connect it to the *Player*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:53 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:55 +msgid "The *MobDetector* will emit ``body_entered`` when a *KinematicBody* or a *RigidBody* node enters it. As it only masks the \"enemies\" physics layers, it will only detect the *Mob* nodes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:59 +msgid "Code-wise, we're going to do two things: emit a signal we'll later use to end the game and destroy the player. We can wrap these operations in a ``die()`` function that helps us put a descriptive label on the code." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:102 +msgid "Try the game again by pressing :kbd:`F5`. If everything is set up correctly, the character should die when an enemy runs into it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:105 +msgid "However, note that this depends entirely on the size and position of the *Player* and the *Mob*\\ 's collision shapes. You may need to move them and resize them to achieve a tight game feel." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:110 +msgid "Ending the game" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:112 +msgid "We can use the *Player*\\ 's ``hit`` signal to end the game. All we need to do is connect it to the *Main* node and stop the *MobTimer* in reaction." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:116 +msgid "Open ``Main.tscn``, select the *Player* node, and in the *Node* dock, connect its ``hit`` signal to the *Main* node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:119 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:121 +msgid "Get and stop the timer in the ``_on_Player_hit()`` function." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:137 +msgid "If you try the game now, the monsters will stop spawning when you die, and the remaining ones will leave the screen." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:140 +msgid "You can pat yourself in the back: you prototyped a complete 3D game, even if it's still a bit rough." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:143 +msgid "From there, we'll add a score, the option to retry the game, and you'll see how you can make the game feel much more alive with minimalistic animations." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:148 +msgid "Code checkpoint" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:150 +msgid "Here are the complete scripts for the *Main*, *Mob*, and *Player* nodes, for reference. You can use them to compare and check your code." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:153 +msgid "Starting with ``Main.gd``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:222 +msgid "Next is ``Mob.gd``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:307 +msgid "Finally, the longest script, ``Player.gd``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/07.killing_player.rst:460 +msgid "See you in the next lesson to add the score and the retry option." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/08.score_and_replay.pot b/sphinx/templates/getting_started/first_3d_game/08.score_and_replay.pot new file mode 100644 index 0000000000..d74a282a7e --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/08.score_and_replay.pot @@ -0,0 +1,389 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:4 +msgid "Score and replay" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:6 +msgid "In this part, we'll add the score, music playback, and the ability to restart the game." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:9 +msgid "We have to keep track of the current score in a variable and display it on screen using a minimal interface. We will use a text label to do that." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:12 +msgid "In the main scene, add a new *Control* node as a child of *Main* and name it *UserInterface*. You will automatically be taken to the 2D screen, where you can edit your User Interface (UI)." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:16 +msgid "Add a *Label* node and rename it to *ScoreLabel*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:18 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:20 +msgid "In the *Inspector*, set the *Label*'s *Text* to a placeholder like \"Score: 0\"." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:22 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:24 +msgid "Also, the text is white by default, like our game's background. We need to change its color to see it at runtime." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:27 +msgid "Scroll down to *Custom Colors* and click the black box next to *Font Color* to tint the text." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:30 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:32 +msgid "Pick a dark tone so it contrasts well with the 3D scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:34 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:36 +msgid "Finally, click and drag on the text in the viewport to move it away from the top-left corner." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:39 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:41 +msgid "The *UserInterface* node allows us to group our UI in a branch of the scene tree and use a theme resource that will propagate to all its children. We'll use it to set our game's font." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:46 +msgid "Creating a UI theme" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:48 +msgid "Once again, select the *UserInterface* node. In the *Inspector*, create a new theme resource in *Theme -> Theme*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:51 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:53 +msgid "Click on it to open the theme editor In the bottom panel. It gives you a preview of how all the built-in UI widgets will look with your theme resource." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:56 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:58 +msgid "By default, a theme only has one property, the *Default Font*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:62 +msgid "You can add more properties to the theme resource to design complex user interfaces, but that is beyond the scope of this series. To learn more about creating and editing themes, see :ref:`doc_gui_skinning`." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:66 +msgid "Click the *Default Font* property and create a new *DynamicFont*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:68 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:70 +msgid "Expand the *DynamicFont* by clicking on it and expand its *Font* section. There, you will see an empty *Font Data* field." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:73 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:75 +msgid "This one expects a font file like the ones you have on your computer. Two common font file formats are TrueType Font (TTF) and OpenType Font (OTF)." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:78 +msgid "In the *FileSystem* dock, Expand the ``fonts`` directory and click and drag the ``Montserrat-Medium.ttf`` file we included in the project onto the *Font Data*. The text will reappear in the theme preview." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:82 +msgid "The text is a bit small. Set the *Settings -> Size* to ``22`` pixels to increase the text's size." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:85 +msgid "|image9|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:88 +msgid "Keeping track of the score" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:90 +msgid "Let's work on the score next. Attach a new script to the *ScoreLabel* and define the ``score`` variable." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:107 +msgid "The score should increase by ``1`` every time we squash a monster. We can use their ``squashed`` signal to know when that happens. However, as we instantiate monsters from the code, we cannot do the connection in the editor." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:111 +msgid "Instead, we have to make the connection from the code every time we spawn a monster." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:114 +msgid "Open the script ``Main.gd``. If it's still open, you can click on its name in the script editor's left column." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:117 +msgid "|image10|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:119 +msgid "Alternatively, you can double-click the ``Main.gd`` file in the *FileSystem* dock." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:122 +msgid "At the bottom of the ``_on_MobTimer_timeout()`` function, add the following line." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:142 +msgid "This line means that when the mob emits the ``squashed`` signal, the *ScoreLabel* node will receive it and call the function ``_on_Mob_squashed()``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:145 +msgid "Head back to the ``ScoreLabel.gd`` script to define the ``_on_Mob_squashed()`` callback function." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:148 +msgid "There, we increment the score and update the displayed text." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:165 +msgid "The second line uses the value of the ``score`` variable to replace the placeholder ``%s``. When using this feature, Godot automatically converts values to text, which is convenient to output text in labels or using the ``print()`` function." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:172 +msgid "You can learn more about string formatting here: :ref:`doc_gdscript_printf`." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:174 +msgid "You can now play the game and squash a few enemies to see the score increase." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:177 +msgid "|image11|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:181 +msgid "In a complex game, you may want to completely separate your user interface from the game world. In that case, you would not keep track of the score on the label. Instead, you may want to store it in a separate, dedicated object. But when prototyping or when your project is simple, it is fine to keep your code simple. Programming is always a balancing act." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:188 +msgid "Retrying the game" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:190 +msgid "We'll now add the ability to play again after dying. When the player dies, we'll display a message on the screen and wait for input." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:193 +msgid "Head back to the *Main* scene, select the *UserInterface* node, add a *ColorRect* node as a child of it and name it *Retry*. This node fills a rectangle with a uniform color and will serve as an overlay to darken the screen." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:198 +msgid "To make it span over the whole viewport, you can use the *Layout* menu in the toolbar." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:201 +msgid "|image12|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:203 +msgid "Open it and apply the *Full Rect* command." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:205 +msgid "|image13|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:207 +msgid "Nothing happens. Well, almost nothing: only the four green pins move to the corners of the selection box." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:210 +msgid "|image14|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:212 +msgid "This is because UI nodes (all the ones with a green icon) work with anchors and margins relative to their parent's bounding box. Here, the *UserInterface* node has a small size and the *Retry* one is limited by it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:216 +msgid "Select the *UserInterface* and apply *Layout -> Full Rect* to it as well. The *Retry* node should now span the whole viewport." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:219 +msgid "Let's change its color so it darkens the game area. Select *Retry* and in the *Inspector*, set its *Color* to something both dark and transparent. To do so, in the color picker, drag the *A* slider to the left. It controls the color's alpha channel, that is to say, its opacity." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:224 +msgid "|image15|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:226 +msgid "Next, add a *Label* as a child of *Retry* and give it the *Text* \"Press Enter to retry.\"" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:229 +msgid "|image16|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:231 +msgid "To move it and anchor it in the center of the screen, apply *Layout -> Center* to it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:234 +msgid "|image17|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:237 +msgid "Coding the retry option" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:239 +msgid "We can now head to the code to show and hide the *Retry* node when the player dies and plays again." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:242 +msgid "Open the script ``Main.gd``. First, we want to hide the overlay at the start of the game. Add this line to the ``_ready()`` function." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:260 +msgid "Then, when the player gets hit, we show the overlay." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:277 +msgid "Finally, when the *Retry* node is visible, we need to listen to the player's input and restart the game if they press enter. To do this, we use the built-in ``_unhandled_input()`` callback." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:281 +msgid "If the player pressed the predefined ``ui_accept`` input action and *Retry* is visible, we reload the current scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:303 +msgid "The function ``get_tree()`` gives us access to the global :ref:`SceneTree ` object, which allows us to reload and restart the current scene." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:308 +msgid "Adding music" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:310 +msgid "To add music that plays continuously in the background, we're going to use another feature in Godot: :ref:`autoloads `." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:313 +msgid "To play audio, all you need to do is add an *AudioStreamPlayer* node to your scene and attach an audio file to it. When you start the scene, it can play automatically. However, when you reload the scene, like we do to play again, the audio nodes are also reset, and the music starts back from the beginning." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:318 +msgid "You can use the autoload feature to have Godot load a node or a scene automatically at the start of the game, outside the current scene. You can also use it to create globally accessible objects." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:322 +msgid "Create a new scene by going to the *Scene* menu and clicking *New Scene*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:324 +msgid "|image18|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:326 +msgid "Click the *Other Node* button to create an *AudioStreamPlayer* and rename it to *MusicPlayer*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:329 +msgid "|image19|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:331 +msgid "We included a music soundtrack in the ``art/`` directory, ``House In a Forest Loop.ogg``. Click and drag it onto the *Stream* property in the *Inspector*. Also, turn on *Autoplay* so the music plays automatically at the start of the game." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:336 +msgid "|image20|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:338 +msgid "Save the scene as ``MusicPlayer.tscn``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:340 +msgid "We have to register it as an autoload. Head to the *Project -> Project Settings…* menu and click on the *Autoload* tab." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:343 +msgid "In the *Path* field, you want to enter the path to your scene. Click the folder icon to open the file browser and double-click on ``MusicPlayer.tscn``. Then, click the *Add* button on the right to register the node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:347 +msgid "|image21|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:349 +msgid "If you run the game now, the music will play automatically. And even when you lose and retry, it keeps going." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:352 +msgid "Before we wrap up this lesson, here's a quick look at how it works under the hood. When you run the game, your *Scene* dock changes to give you two tabs: *Remote* and *Local*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:356 +msgid "|image22|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:358 +msgid "The *Remote* tab allows you to visualize the node tree of your running game. There, you will see the *Main* node and everything the scene contains and the instantiated mobs at the bottom." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:362 +msgid "|image23|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:364 +msgid "At the top are the autoloaded *MusicPlayer* and a *root* node, which is your game's viewport." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:367 +msgid "And that does it for this lesson. In the next part, we'll add an animation to make the game both look and feel much nicer." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/08.score_and_replay.rst:370 +msgid "Here is the complete ``Main.gd`` script for reference." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/09.adding_animations.pot b/sphinx/templates/getting_started/first_3d_game/09.adding_animations.pot new file mode 100644 index 0000000000..2ca4f9d602 --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/09.adding_animations.pot @@ -0,0 +1,345 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:4 +msgid "Character animation" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:6 +msgid "In this final lesson, we'll use Godot's built-in animation tools to make our characters float and flap. You'll learn to design animations in the editor and use code to make your game feel alive." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:10 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:12 +msgid "We'll start with an introduction to using the animation editor." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:15 +msgid "Using the animation editor" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:17 +msgid "The engine comes with tools to author animations in the editor. You can then use the code to play and control them at runtime." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:20 +msgid "Open the player scene, select the player node, and add an animation player node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:22 +msgid "The *Animation* dock appears in the bottom panel." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:24 +msgid "|image1|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:26 +msgid "It features a toolbar and the animation drop-down menu at the top, a track editor in the middle that's currently empty, and filter, snap, and zoom options at the bottom." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:30 +msgid "Let's create an animation. Click on *Animation -> New*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:32 +msgid "|image2|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:34 +msgid "Name the animation \"float\"." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:36 +msgid "|image3|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:38 +msgid "Once you created the animation, the timeline appears with numbers representing time in seconds." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:41 +msgid "|image4|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:43 +msgid "We want the animation to start playback automatically at the start of the game. Also, it should loop." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:46 +msgid "To do so, you can click the button with an \"A+\" icon in the animation toolbar and the looping arrows, respectively." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:49 +msgid "|image5|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:51 +msgid "You can also pin the animation editor by clicking the pin icon in the top-right. This prevents it from folding when you click on the viewport and deselect the nodes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:55 +msgid "|image6|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:57 +msgid "Set the animation duration to ``1.2`` seconds in the top-right of the dock." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:59 +msgid "|image7|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:61 +msgid "You should see the gray ribbon widen a bit. It shows you the start and end of your animation and the vertical blue line is your time cursor." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:64 +msgid "|image8|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:66 +msgid "You can click and drag the slider in the bottom-right to zoom in and out of the timeline." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:69 +msgid "|image9|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:72 +msgid "The float animation" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:74 +msgid "With the animation player node, you can animate most properties on as many nodes as you need. Notice the key icon next to properties in the *Inspector*. You can click any of them to create a keyframe, a time and value pair for the corresponding property. The keyframe gets inserted where your time cursor is in the timeline." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:80 +msgid "Let's insert our first keys. Here, we will animate both the translation and the rotation of the *Character* node." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:83 +msgid "Select the *Character* and click the key icon next to *Translation* in the *Inspector*. Do the same for *Rotation Degrees*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:86 +msgid "|image10|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:88 +msgid "Two tracks appear in the editor with a diamond icon representing each keyframe." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:90 +msgid "|image11|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:92 +msgid "You can click and drag on the diamonds to move them in time. Move the translation key to ``0.2`` seconds and the rotation key to ``0.1`` seconds." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:95 +msgid "|image12|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:97 +msgid "Move the time cursor to ``0.5`` seconds by clicking and dragging on the gray timeline. In the *Inspector*, set the *Translation*'s *Y* axis to about ``0.65`` meters and the *Rotation Degrees*' *X* axis to ``8``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:101 +msgid "|image13|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:103 +msgid "Create a keyframe for both properties and shift the translation key to ``0.7`` seconds by dragging it on the timeline." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:106 +msgid "|image14|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:110 +msgid "A lecture on the principles of animation is beyond the scope of this tutorial. Just note that you don't want to time and space everything evenly. Instead, animators play with timing and spacing, two core animation principles. You want to offset and contrast in your character's motion to make them feel alive." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:116 +msgid "Move the time cursor to the end of the animation, at ``1.2`` seconds. Set the Y translation to about ``0.35`` and the X rotation to ``-9`` degrees. Once again, create a key for both properties." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:120 +msgid "You can preview the result by clicking the play button or pressing :kbd:`Shift + D`. Click the stop button or press :kbd:`S` to stop playback." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:123 +msgid "|image15|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:125 +msgid "You can see that the engine interpolates between your keyframes to produce a continuous animation. At the moment, though, the motion feels very robotic. This is because the default interpolation is linear, causing constant transitions, unlike how living things move in the real world." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:130 +msgid "We can control the transition between keyframes using easing curves." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:132 +msgid "Click and drag around the first two keys in the timeline to box select them." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:134 +msgid "|image16|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:136 +msgid "You can edit the properties of both keys simultaneously in the *Inspector*, where you can see an *Easing* property." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:139 +msgid "|image17|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:141 +msgid "Click and drag on the curve, pulling it towards the left. This will make it ease-out, that is to say, transition fast initially and slow down as the time cursor reaches the next keyframe." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:145 +msgid "|image18|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:147 +msgid "Play the animation again to see the difference. The first half should already feel a bit bouncier." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:150 +msgid "Apply an ease-out to the second keyframe in the rotation track." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:152 +msgid "|image19|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:154 +msgid "Do the opposite for the second translation keyframe, dragging it to the right." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:156 +msgid "|image20|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:158 +msgid "Your animation should look something like this." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:160 +msgid "|image21|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:164 +msgid "Animations update the properties of the animated nodes every frame, overriding initial values. If we directly animated the *Player* node, it would prevent us from moving it in code. This is where the *Pivot* node comes in handy: even though we animated the *Character*, we can still move and rotate the *Pivot* and layer changes on top of the animation in a script." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:171 +msgid "If you play the game, the player's creature will now float!" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:173 +msgid "If the creature is a little too close to the floor, you can move the *Pivot* up to offset it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:177 +msgid "Controlling the animation in code" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:179 +msgid "We can use code to control the animation playback based on the player's input. Let's change the animation speed when the character is moving." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:182 +msgid "Open the *Player*'s script by clicking the script icon next to it." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:184 +msgid "|image22|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:186 +msgid "In ``_physics_process()``, after the line where we check the ``direction`` vector, add the following code." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:216 +msgid "This code makes it so when the player moves, we multiply the playback speed by ``4``. When they stop, we reset it to normal." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:219 +msgid "We mentioned that the pivot could layer transforms on top of the animation. We can make the character arc when jumping using the following line of code. Add it at the end of ``_physics_process()``." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:240 +msgid "Animating the mobs" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:242 +msgid "Here's another nice trick with animations in Godot: as long as you use a similar node structure, you can copy them to different scenes." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:245 +msgid "For example, both the *Mob* and the *Player* scenes have a *Pivot* and a *Character* node, so we can reuse animations between them." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:248 +msgid "We're going to duplicate the animation using a feature called \"merge from scene\"." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:251 +msgid "Open the *Mob* scene, right-click on the *Mob* node and select *Merge From Scene*." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:254 +msgid "|image23|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:256 +msgid "Double-click ``Player.tscn`` to open it and import the *AnimationPlayer*. That's it; all monsters will now play the float animation." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:259 +msgid "We can change the playback speed based on the creature's ``random_speed``. Open the *Mob*'s script and at the end of the ``initialize()`` function, add the following line." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:278 +msgid "And with that, you finished coding your first complete 3D game." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:280 +msgid "**Congratulations**!" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:282 +msgid "In the next part, we'll quickly recap what you learned and give you some links to keep learning more. But for now, here are the complete ``Player.gd`` and ``Mob.gd`` so you can check your code against them." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:286 +msgid "Here's the *Player* script." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/09.adding_animations.rst:453 +msgid "And the *Mob*'s script." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/going_further.pot b/sphinx/templates/getting_started/first_3d_game/going_further.pot new file mode 100644 index 0000000000..33d06fb0eb --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/going_further.pot @@ -0,0 +1,73 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:4 +msgid "Going further" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:6 +msgid "You can pat yourself on the back for having completed your first 3D game with Godot." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:9 +msgid "In this series, we went over a wide range of techniques and editor features. Hopefully, you’ve witnessed how intuitive Godot’s scene system can be and learned a few tricks you can apply in your projects." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:13 +msgid "But we just scratched the surface: Godot has a lot more in store for you to save time creating games. And you can learn all that by browsing the documentation." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:16 +msgid "Where should you begin? Below, you’ll find a few pages to start exploring and build upon what you’ve learned so far." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:19 +msgid "But before that, here’s a link to download a completed version of the project: ``_." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:23 +msgid "Exploring the manual" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:25 +msgid "The manual is your ally whenever you have a doubt or you’re curious about a feature. It does not contain tutorials about specific game genres or mechanics. Instead, it explains how Godot works in general. In it, you will find information about 2D, 3D, physics, rendering and performance, and much more." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:30 +msgid "Here are the sections we recommend you to explore next:" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:32 +msgid "Read the :ref:`Scripting section ` to learn essential programming features you’ll use in every project." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:34 +msgid "The :ref:`3D ` and :ref:`Physics ` sections will teach you more about 3D game creation in the engine." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:36 +msgid ":ref:`Inputs ` is another important one for any game project." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:38 +msgid "You can start with these or, if you prefer, look at the sidebar menu on the left and pick your options." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/going_further.rst:41 +msgid "We hope you enjoyed this tutorial series, and we’re looking forward to seeing what you achieve using Godot." +msgstr "" diff --git a/sphinx/templates/getting_started/first_3d_game/index.pot b/sphinx/templates/getting_started/first_3d_game/index.pot new file mode 100644 index 0000000000..0ea922b004 --- /dev/null +++ b/sphinx/templates/getting_started/first_3d_game/index.pot @@ -0,0 +1,85 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/first_3d_game/index.rst:4 +msgid "Your first 3D game" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:6 +msgid "In this step-by-step tutorial series, you will create your first complete 3D game with Godot. By the end of the series, you will have a simple yet finished project of your own like the animated gif below." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:10 +msgid "|image0|" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:12 +msgid "The game we'll code here is similar to :ref:`doc_your_first_2d_game`, with a twist: you can now jump and your goal is to squash the creeps. This way, you will both **recognize patterns** you learned in the previous tutorial and **build upon them** with new code and features." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:17 +msgid "You will learn to:" +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:19 +msgid "Work with 3D coordinates with a jumping mechanic." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:20 +msgid "Use kinematic bodies to move 3D characters and detect when and how they collide." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:22 +msgid "Use physics layers and a group to detect interactions with specific entities." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:23 +msgid "Code basic procedural gameplay by instancing monsters at regular time intervals." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:25 +msgid "Design a movement animation and change its speed at run-time." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:26 +msgid "Draw a user interface on a 3D game." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:28 +msgid "And more." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:30 +msgid "This tutorial is for beginners who followed the complete getting started series. We'll start slow with detailed instructions and shorten them as we do similar steps. If you're an experienced programmer, you can browse the complete demo's source code here: `Squash the Creep source code `__." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:38 +msgid "You can follow this series without having done the 2D one. However, if you're new to game development, we recommend you to start with 2D. 3D game code is always more complex and the 2D series will give you foundations to follow along more comfortably." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:43 +msgid "We prepared some game assets so we can jump straight to the code. You can download them here: `Squash the Creeps assets `__." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:47 +msgid "We will first work on a basic prototype for the player's movement. We will then add the monsters that we'll spawn randomly around the screen. After that, we'll implement the jump and squashing mechanic before refining the game with some nice animation. We'll wrap up with the score and the retry screen." +msgstr "" + +#: ../../docs/getting_started/first_3d_game/index.rst:53 +msgid "Contents" +msgstr "" diff --git a/sphinx/templates/getting_started/introduction/first_look_at_the_editor.pot b/sphinx/templates/getting_started/introduction/first_look_at_the_editor.pot new file mode 100644 index 0000000000..bfb5d0f83d --- /dev/null +++ b/sphinx/templates/getting_started/introduction/first_look_at_the_editor.pot @@ -0,0 +1,162 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:10 +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:40 +msgid "First look at Godot's editor" +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:12 +msgid "This page will give you a brief overview of Godot's interface. We're going to look at the different main screens and docks to help you situate yourself." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:15 +msgid "For a comprehensive breakdown of the editor's interface and how to use it, see the :ref:`Editor manual `." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:19 +msgid "The Project manager" +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:21 +msgid "When you launch Godot, the first window you see is the Project Manager. In the default tab, \"Projects,\" you can manage existing projects, import or create new ones, and more." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:27 +msgid "At the top of the window, there is another tab named \"Templates\". You can search for demo projects in the open-source asset library, which includes many projects developed by the community." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:33 +msgid "You can also change the editor's language using the drop-down menu to the right of the engine's version in the window's top-right corner. By default, it is in English (EN)." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:42 +msgid "When you open a new or an existing project, the editor's interface appears. Let's look at its main areas." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:47 +msgid "By default, it features **menus**, **main screens**, and playtest buttons along the window's top edge." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:52 +msgid "In the center is the **viewport** with its **toolbar** at the top, where you'll find tools to move, scale, or lock the scene's nodes." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:57 +msgid "On either side of the viewport sit the **docks**. And at the bottom of the window lies the **bottom panel**." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:60 +msgid "The toolbar changes based on the context and selected node. Here is the 2D toolbar." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:64 +msgid "Below is the 3D one." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:68 +msgid "Let's look at the docks. The **FileSystem** dock lists your project files, be it scripts, images, audio samples, and more." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:73 +msgid "The **Scene** dock lists the active scene's nodes." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:77 +msgid "The **Inspector** allows you to edit the properties of a selected node." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:81 +msgid "The **bottom panel**, situated below the viewport, is the host for the debug console, the animation editor, the audio mixer, and more. They can take precious space, that's why they're folded by default." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:87 +msgid "When you click on one, it expands vertically. Below, you can see the animation editor opened." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:92 +msgid "The four main screens" +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:94 +msgid "There are four main screen buttons centered at the top of the editor: 2D, 3D, Script, and AssetLib." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:97 +msgid "You'll use the **2D screen** for all types of games. In addition to 2D games, the 2D screen is where you'll build your interfaces." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:102 +msgid "In the **3D screen**, you can work with meshes, lights, and design levels for 3D games." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:107 +msgid "Notice the perspective button under the toolbar. Clicking on it opens a list of options related to the 3D view." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:112 +msgid "Read :ref:`doc_introduction_to_3d` for more detail about the **3D main screen**." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:115 +msgid "The **Script screen** is a complete code editor with a debugger, rich auto-completion, and built-in code reference." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:120 +msgid "Finally, the **AssetLib** is a library of free and open-source add-ons, scripts, and assets to use in your projects." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:125 +msgid "You can learn more about the asset library in :ref:`doc_what_is_assetlib`." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:129 +msgid "Integrated class reference" +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:131 +msgid "Godot comes with a built-in class reference." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:133 +msgid "You can search for information about a class, method, property, constant, or signal by any one of the following methods:" +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:136 +msgid "Pressing :kbd:`F1` (or :kbd:`Alt + Space` on macOS) anywhere in the editor." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:137 +msgid "Clicking the \"Search Help\" button in the top-right of the Script main screen." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:138 +msgid "Clicking on the Help menu and Search Help." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:139 +msgid "Clicking while pressing the :kbd:`Ctrl` key on a class name, function name, or built-in variable in the script editor." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:145 +msgid "When you do any of these, a window pops up. Type to search for any item. You can also use it to browse available objects and methods." +msgstr "" + +#: ../../docs/getting_started/introduction/first_look_at_the_editor.rst:150 +msgid "Double-click on an item to open the corresponding page in the script main screen." +msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/godot_design_philosophy.pot b/sphinx/templates/getting_started/introduction/godot_design_philosophy.pot similarity index 62% rename from sphinx/templates/getting_started/step_by_step/godot_design_philosophy.pot rename to sphinx/templates/getting_started/introduction/godot_design_philosophy.pot index 47979494be..e8d91db598 100644 --- a/sphinx/templates/getting_started/step_by_step/godot_design_philosophy.pot +++ b/sphinx/templates/getting_started/introduction/godot_design_philosophy.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,174 +16,182 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:4 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:4 msgid "Godot's design philosophy" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:6 -msgid "Now that you've gotten your hands wet, let's talk about Godot's design." +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:6 +msgid "Now that you've gotten your feet wet, let's talk about Godot's design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:8 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:8 msgid "**Every game engine is different and fits different needs.** Not only do they offer a range of features, but the design of each engine is unique. This leads to different workflows and different ways to form your games' structures. This all stems from their respective design philosophies." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:13 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:13 msgid "This page is here to help you understand how Godot works, starting with some of its core pillars. It is not a list of available features, nor is it an engine comparison. To know if any engine can be a good fit for your project, you need to try it out for yourself and understand its design and limitations." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:19 -msgid "Please watch `Discover Godot 3, the Free game engine `_ if you're looking for an overview of the engine's features." +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:19 +msgid "Please watch `Godot explained in 5 minutes `_ if you're looking for an overview of the engine's features." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:23 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:24 msgid "Object-oriented design and composition" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:25 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:26 msgid "Godot embraces object-oriented design at its core with its flexible scene system and Node hierarchy. It tries to stay away from strict programming patterns to offer an intuitive way to structure your game." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:29 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:30 msgid "For one, Godot lets you **compose or aggregate** scenes. It's like nested prefabs: you can create a BlinkingLight scene and a BrokenLantern scene that uses the BlinkingLight. Then, create a city filled with BrokenLanterns. Change the BlinkingLight's color, save, and all the BrokenLanterns in the city will update instantly." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:36 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:37 msgid "On top of that, you can **inherit** from any scene." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:38 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:39 msgid "A Godot scene could be a Weapon, a Character, an Item, a Door, a Level, part of a level… anything you'd like. It works like a class in pure code, except you're free to design it by using the editor, using only the code, or mixing and matching the two." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:43 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:44 msgid "It's different from prefabs you find in several 3D engines, as you can then inherit from and extend those scenes. You may create a Magician that extends your Character. Modify the Character in the editor and the Magician will update as well. It helps you build your projects so that their structure matches the game's design." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:49 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:50 msgid "|image0|" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:51 -msgid "Also note that Godot offers many different types of objects called nodes, each with a specific purpose. Nodes are part of a tree and always inherit from their parents up to the Node class. Although the engine does feature components like collision shapes, they're the exception, not the norm." +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:52 +msgid "Also note that Godot offers many different types of objects called nodes, each with a specific purpose. Nodes are part of a tree and always inherit from their parents up to the Node class. Although the engine does feature some nodes like collision shapes that a parent physics body will use, most nodes work independently from one another." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:57 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:58 +msgid "In other words, Godot's nodes do not work like components in some other game engines." +msgstr "" + +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:61 msgid "|image1|" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:59 -msgid "Sprite is a Node2D, a CanvasItem and a Node. It has all the properties and features of its three parent classes, like transforms or the ability to draw custom shapes and render with a custom shader." +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:63 +msgid "Sprite2D is a Node2D, a CanvasItem and a Node. It has all the properties and features of its three parent classes, like transforms or the ability to draw custom shapes and render with a custom shader." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:64 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:68 msgid "All-inclusive package" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:66 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:70 msgid "Godot tries to provide its own tools to answer most common needs. It has a dedicated scripting workspace, an animation editor, a tilemap editor, a shader editor, a debugger, a profiler, the ability to hot-reload locally and on remote devices, etc." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:71 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:75 msgid "|image2|" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:73 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:77 msgid "The goal is to offer a full package to create games and a continuous user experience. You can still work with external programs as long as there is an import plugin for it. Or you can create one, like the `Tiled Map Importer `__." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:78 -msgid "That is also partly why Godot offers its own programming languages GDscript and VisualScript, along with C#. They're designed for the needs of game developers and game designers, and they're tightly integrated in the engine and the editor." +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:82 +msgid "That is also partly why Godot offers its own programming languages GDScript and VisualScript, along with C#. They're designed for the needs of game developers and game designers, and they're tightly integrated in the engine and the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:83 -msgid "GDscript lets you write simple code using Python-like syntax, yet it detects types and offers a static language's quality of auto-completion. It is also optimized for gameplay code with built-in types like Vectors and Colors." +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:87 +msgid "GDScript lets you write code using an indentation-based syntax, yet it detects types and offers a static language's quality of auto-completion. It is also optimized for gameplay code with built-in types like Vectors and Colors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:87 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:91 msgid "Note that with GDNative, you can write high-performance code using compiled languages like C, C++, Rust, or Python (using the Cython compiler) without recompiling the engine." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:91 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:95 msgid "|image3|" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:93 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:97 msgid "*VisualScript is a node-based programming language that integrates well in the editor. You can drag and drop nodes or resources into the graph to create new code blocks.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:97 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:101 msgid "Note that the 3D workspace doesn't feature as many tools as the 2D workspace. You'll need external programs or add-ons to edit terrains, animate complex characters, and so on. Godot provides a complete API to extend the editor's functionality using game code. See `The Godot editor is a Godot game`_ below." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:102 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:106 msgid "|image4|" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:104 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:108 msgid "*A State Machine editor plugin in Godot 2 by kubecz3k. It lets you manage states and transitions visually.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:108 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:112 msgid "Open source" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:110 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:114 msgid "Godot offers a fully open source codebase under the **MIT license**. This means all the technologies that ship with it have to be Free (as in freedom) as well. For the most part, they're developed from the ground up by contributors." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:115 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:119 msgid "Anyone can plug in proprietary tools for the needs of their projects — they just won't ship with the engine. This may include Google AdMob, or FMOD. Any of these can come as third-party plugins instead." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:120 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:124 msgid "On the other hand, an open codebase means you can **learn from and extend the engine** to your heart's content. You can also debug games easily, as Godot will print errors with a stack trace, even if they come from the engine itself." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:126 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:130 msgid "This **does not affect the work you do with Godot** in any way: there's no strings attached to the engine or anything you make with it." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:130 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:134 msgid "Community-driven" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:132 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:136 msgid "**Godot is made by its community, for the community, and for all game creators out there.** It's the needs of the users and open discussions that drive the core updates. New features from the core developers often focus on what will benefit the most users first." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:137 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:141 msgid "That said, although a handful of core developers work on it full-time, the project has over 600 contributors at the time of writing. Benevolent programmers work on features they may need themselves, so you'll see improvements in all corners of the engine at the same time in every major release." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:144 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:148 msgid "The Godot editor is a Godot game" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:146 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:150 msgid "The Godot editor runs on the game engine. It uses the engine's own UI system, it can hot-reload code and scenes when you test your projects, or run game code in the editor. This means you can **use the same code** and scenes for your games, or **build plugins and extend the editor.**" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:151 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:155 msgid "This leads to a reliable and flexible UI system, as it powers the editor itself. With the ``tool`` keyword, you can run any game code in the editor." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:154 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:158 msgid "|image5|" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:156 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:160 msgid "*RPG in a Box is a voxel RPG editor made with Godot 2. It uses Godot's UI tools for its node-based programming system and for the rest of the interface.*" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:160 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:164 msgid "Put the ``tool`` keyword at the top of any GDScript file and it will run in the editor. This lets you import and export plugins, create plugins like custom level editors, or create scripts with the same nodes and API you use in your projects." msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:166 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:171 +msgid "The editor is fully written in C++ and is statically compiled into the binary. This means you can't import it as a typical project that would have a ``project.godot`` file." +msgstr "" + +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:176 msgid "Separate 2D and 3D engines" msgstr "" -#: ../../docs/getting_started/step_by_step/godot_design_philosophy.rst:168 +#: ../../docs/getting_started/introduction/godot_design_philosophy.rst:178 msgid "Godot offers dedicated 2D and 3D rendering engines. As a result, **the base unit for 2D scenes is pixels.** Even though the engines are separate, you can render 2D in 3D, 3D in 2D, and overlay 2D sprites and interfaces over your 3D world." msgstr "" diff --git a/sphinx/templates/getting_started/introduction/index.pot b/sphinx/templates/getting_started/introduction/index.pot new file mode 100644 index 0000000000..1b79dfc67f --- /dev/null +++ b/sphinx/templates/getting_started/introduction/index.pot @@ -0,0 +1,29 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/introduction/index.rst:6 +msgid "Introduction" +msgstr "" + +#: ../../docs/getting_started/introduction/index.rst:8 +msgid "This series will introduce you to Godot and give you an overview of its features." +msgstr "" + +#: ../../docs/getting_started/introduction/index.rst:11 +msgid "In the following pages, you will get answers to questions such as \"Is Godot for me?\" or \"What can I do with Godot?\". We will then introduce the engine's most essential concepts, run you through the editor's interface, and give you tips to make the most of your time learning it." +msgstr "" diff --git a/sphinx/templates/getting_started/introduction/introduction_to_godot.pot b/sphinx/templates/getting_started/introduction/introduction_to_godot.pot new file mode 100644 index 0000000000..df10d47375 --- /dev/null +++ b/sphinx/templates/getting_started/introduction/introduction_to_godot.pot @@ -0,0 +1,145 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:4 +msgid "Introduction to Godot" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:6 +msgid "This article is here to help you figure out whether Godot might be a good fit for you. We will introduce some broad features of the engine to give you a feel for what you can achieve with it and answer questions such as \"what do I need to know to get started?\"." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:11 +msgid "This is by no means an exhaustive overview. We will introduce many more features in this getting started series." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:15 +msgid "What is Godot?" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:17 +msgid "Godot is a general-purpose 2D and 3D game engine designed to support all sorts of projects. You can use it to create games or applications you can then release on desktop or mobile, as well as on the web." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:21 +msgid "You can also create console games with it, although you either need strong programming skills or a developer to port the game for you." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:24 +msgid "The Godot team can't provide an open-source console export due to the licensing terms imposed by console manufacturers. Regardless of the engine you use, though, releasing games on consoles is always a lot of work. You can read more on that here: :ref:`doc_consoles`." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:30 +msgid "What can the engine do?" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:32 +msgid "Godot was initially developed in-house by an Argentinan game studio. Its development started in 2001, and the engine was rewritten and improved tremendously since its open-source release in 2014." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:36 +msgid "Some examples of games created with Godot include Ex-Zodiac and Helms of Fury." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:42 +msgid "As for applications, the open-source pixel art drawing program Pixelorama is powered by Godot, and so is the voxel RPG creator RPG in a box." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:47 +msgid "You can find many more examples in the official showcase videos:" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:49 +msgid "`April 2020 desktop and console showcase`_" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:50 +msgid "`April 2020 mobile showcase`_" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:53 +msgid "How does it work and look?" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:55 +msgid "Godot comes with a fully-fledged game editor with integrated tools to answer the most common needs. It includes a code editor, an animation editor, a tilemap editor, a shader editor, a debugger, a profiler, and more." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:61 +msgid "The team strives to offer a feature-rich game editor with a consistent user experience. While there is always room for improvement, the user interface keeps getting refined." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:65 +msgid "Of course, if you prefer, you can work with external programs. We officially support importing 3D scenes designed in Blender_ and maintain plugins to code in VSCode_ and Emacs_ for GDScript and C#. We also support Visual Studio for C# on Windows." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:73 +msgid "Programming languages" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:75 +msgid "Let's talk about the available programming languages." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:77 +msgid "You can code your games using :ref:`GDScript `, a Godot-specific and tightly integrated language with a lightweight syntax, or :ref:`C# `, which is popular in the games industry. These are the two main scripting languages we support." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:82 +msgid "Godot also supports a node-based visual programming language named :ref:`VisualScript `." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:85 +msgid "With the :ref:`GDNative ` technology, you can also write gameplay or high-performance algorithms in C or C++ without recompiling the engine. You can use this technology to integrate third-party libraries and other Software Development Kits (SDK) in the engine." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:90 +msgid "Of course, you can also directly add modules and features to the engine, as it's completely free and open-source." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:93 +msgid "These are the five officially supported programming languages. The community maintains support for many more. For more information, see :ref:`GDNative third-party bindings `." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:99 +msgid "What do I need to know to use Godot?" +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:101 +msgid "Godot is a feature-packed game engine. With its thousands of features, there is a lot to learn. To make the most of it, you need good programming foundations. While we try to make the engine accessible, you will benefit a lot from knowing how to think like a programmer first." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:106 +msgid "Godot relies on the object-oriented programming paradigm. Being comfortable with concepts such as classes and objects will help you code efficiently in it." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:109 +msgid "If you are entirely new to programming, we recommend following the `CS50 open courseware`_ from Harvard University. It's a great free course that will teach you everything you need to know to be off to a good start. It will save you countless hours and hurdles learning any game engine afterward." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:114 +msgid "In CS50, you will learn multiple programming languages. Don't be afraid of that: programming languages have many similarities. The skills you learn with one language transfer well to others." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:118 +msgid "We will provide you with more Godot-specific learning resources in :ref:`doc_learning_new_features`." +msgstr "" + +#: ../../docs/getting_started/introduction/introduction_to_godot.rst:121 +msgid "In the next part, you will get an overview of the engine's essential concepts." +msgstr "" diff --git a/sphinx/templates/getting_started/introduction/key_concepts_overview.pot b/sphinx/templates/getting_started/introduction/key_concepts_overview.pot new file mode 100644 index 0000000000..653d61b265 --- /dev/null +++ b/sphinx/templates/getting_started/introduction/key_concepts_overview.pot @@ -0,0 +1,109 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:8 +msgid "Overview of Godot's key concepts" +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:10 +msgid "Every game engine revolves around abstractions you use to build your applications. In Godot, a game is a **tree** of **nodes** that you group together into **scenes**. You can then wire these nodes so they can communicate using **signals**." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:15 +msgid "These are the four concepts you will learn here. We're going to look at them briefly to give you a sense of how the engine works. In the getting started series, you will get to use them in practice." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:20 +msgid "Scenes" +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:22 +msgid "In Godot, you break down your game in reusable scenes. A scene can be a character, a weapon, a menu in the user interface, a single house, an entire level, or anything you can think of. Godot's scenes are flexible; they fill the role of both prefabs and scenes in some other game engines." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:29 +msgid "You can also nest scenes. For example, you can put your character in a level, and drag and drop a scene as a child of it." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:35 +msgid "Nodes" +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:37 +msgid "A scene is composed of one or more **nodes**. Nodes are your game's smallest building blocks that you arrange into trees. Here's an example of a character's nodes." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:43 +msgid "It is made of a ``KinematicBody2D`` node named \"Character\", a ``Sprite2D``, a ``Camera2D``, and a ``CollisionShape2D``." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:46 +msgid "The node names end with \"2D\" because this is a 2D scene. Their 3D counterpart have names that end with \"3D\"." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:49 +msgid "Notice how nodes and scenes look the same in the editor. When you save a tree of nodes as a scene, it then shows as a single node, with its internal structure hidden in the editor." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:53 +msgid "Godot provides an extensive library of base node types you can combine and extend to build more powerful ones. 2D, 3D, or user interface, you will do most things with these nodes." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:60 +msgid "The scene tree" +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:62 +msgid "All your game's scenes come together in the **scene tree**, literally a tree of scenes. And as scenes are trees of nodes, the scene tree also is a tree of nodes. But it's easier to think of your game in terms of scenes as they can represent characters, weapons, doors, or your user interface." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:70 +msgid "Signals" +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:72 +msgid "Nodes emit signals when some event occurs. This feature allows you to make nodes communicate without hard-wiring them in code. It gives you a lot of flexibility in how you structure your scenes." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:78 +msgid "Signals are Godot's version of the *observer* pattern. You can read more about it here: https://gameprogrammingpatterns.com/observer.html" +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:82 +msgid "For example, buttons emit a signal when pressed. You can connect to this signal to run code in reaction to this event, like starting the game or opening a menu." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:85 +msgid "Other built-in signals can tell you when two objects collided, when a character or monster entered a given area, and much more. You can also define new signals tailored to your game." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:90 +msgid "Summary" +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:92 +msgid "Nodes, scenes, the scene tree, and signals are four core concepts in Godot that you will manipulate all the time." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:95 +msgid "Nodes are your game's smallest building blocks. You combine them to create scenes that you then combine and nest into the scene tree. You can then use signals to make nodes react to events in other nodes or different scene tree branches." +msgstr "" + +#: ../../docs/getting_started/introduction/key_concepts_overview.rst:99 +msgid "After this short breakdown, you probably have many questions. Bear with us as you will get many answers throughout the getting started series." +msgstr "" diff --git a/sphinx/templates/getting_started/introduction/learning_new_features.pot b/sphinx/templates/getting_started/introduction/learning_new_features.pot new file mode 100644 index 0000000000..31e8e4f435 --- /dev/null +++ b/sphinx/templates/getting_started/introduction/learning_new_features.pot @@ -0,0 +1,149 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:8 +msgid "Learning new features" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:10 +msgid "Godot is a feature-rich game engine. There is a lot to learn about it. This page explains how you can use the online manual, built-in code reference, and join online communities to learn new features and techniques." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:15 +msgid "Making the most of this manual" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:17 +msgid "What you are reading now is the user manual. It documents each of the engine's concepts and available features. When learning a new topic, you can start by browsing the corresponding section of this website. The left menu allows you to explore broad topics while the search bar will help you find more specific pages. If a page exists for a given theme, it will often link to more related content." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:26 +msgid "The manual has a companion class reference that explains each Godot class's available functions and properties when programming. While the manual covers general features, concepts, and how to use the editor, the reference is all about using Godot's scripting API (Application Programming Interface). You can access it both online and offline. We recommend browsing the reference offline, from within the Godot editor. To do so, go to Help -> Search or press :kbd:`F1`." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:36 +msgid "To browse it online, head to the manual's :ref:`Class Reference ` section." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:39 +msgid "A class reference's page tells you:" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:41 +msgid "Where the class exists in the inheritance hierarchy. You can click the top links to jump to parent classes and see the properties and methods a type inherits." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:47 +msgid "A summary of the class's role and use cases." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:49 +msgid "An explanation of the class's properties, methods, signals, enums, and constants." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:52 +msgid "Links to manual pages further detailing the class." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:54 +msgid "If the manual or class reference is missing or has insufficient information, please open an Issue in the official `godot-docs `_ GitHub repository to report it." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:59 +msgid "You can Ctrl-click any underlined text like the name of a class, property, method, signal, or constant to jump to it." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:63 +msgid "Learning to think like a programmer" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:65 +msgid "Teaching programming foundations and how to think like a game developer is beyond the scope of Godot's documentation. If you're new to programming, we recommend two excellent free resources to get you started:" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:69 +msgid "Harvard university offers a free courseware to learn to program, `CS50 `_. It will teach you programming fundamentals, how code works, and how to think like a programmer. These skills are essential to become a game developer and learn any game engine efficiently. You can see this course as an investment that will save you time and trouble when you learn to create games." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:76 +msgid "If you prefer books, check out the free ebook `Automate The Boring Stuff With Python `_ by Al Sweigart's." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:80 +msgid "Learning with the community" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:82 +msgid "Godot has a growing community of users. If you're stuck on a problem or need help to better understand how to achieve something, you can ask other users for help on one of the many `active communities `_." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:87 +msgid "The best place to ask for questions and find already answered ones is the official `Questions & Answers `_ site. These responses show up in search engine results and get saved, allowing other users to benefit from discussions on the platform. Once you asked a question there, you can share its link on other social platforms. Before asking a question, be sure to look for existing answers that might solve your problem on this website or using your preferred search engine." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:95 +msgid "Asking questions well and providing details will help others answer you faster and better. When asking questions, we recommend including the following information:" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:99 +msgid "**Describe your goal**. You want to explain what you are trying to achieve design-wise. If you are having trouble figuring out how to make a solution work, there may be a different, easier solution that accomplishes the same goal." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:104 +msgid "If there is an error involved, **share the exact error message**. You can copy the exact error message in the editor's Debugger bottom panel by clicking the Copy Error icon. Knowing what it says can help community members better identify how you triggered the error." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:109 +msgid "If there is code involved, **share a code sample**. Other users won't be able to help you fix a problem without seeing your code. Share the code as text directly. To do so, you can copy and paste a short code snippet in a chat box, or use a website like `Pastebin `_ to share long files." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:115 +msgid "**Share a screenshot** of your *Scene* dock along with your written code. Most of the code you write affects nodes in your scenes. As a result, you should think of those scenes as part of your source code." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:121 +msgid "Also, please don't take a picture with your phone, the low quality and screen reflections can make it hard to understand the image. Your operating system should have a built-in tool to take screenshots with the :kbd:`PrtSc` (Print Screen) key." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:126 +msgid "Alternatively, you can use a program like `ShareX `_ on Windows or `FlameShot `_ on Linux." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:129 +msgid "Sharing a video of your running game can also be really **useful to troubleshoot your game**. You can use programs like `OBS Studio `_ and `Screen to GIF `_ to capture your screen." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:134 +msgid "You can then use a service like `streamable `_ or a cloud provider to upload and share your videos for free." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:137 +msgid "If you're not using the stable version of Godot, please mention the version you're using. The answer can be different as available features and the interface evolve rapidly." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:141 +msgid "Following these guidelines will maximize your chances of getting the answer you're looking for. They will save time both to you and the persons helping you." +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:145 +msgid "Community tutorials" +msgstr "" + +#: ../../docs/getting_started/introduction/learning_new_features.rst:147 +msgid "This manual aims to provide a comprehensive reference of Godot's features. Aside from the 2D and 3D getting started series, it does not contain tutorials to implement specific game genres. If you're looking for a tutorial about creating a role-playing game, a platformer, or other, please see :ref:`doc_community_tutorials`, which lists content made by the Godot community." +msgstr "" diff --git a/sphinx/templates/getting_started/scripting/c_sharp/c_sharp_differences.pot b/sphinx/templates/getting_started/scripting/c_sharp/c_sharp_differences.pot deleted file mode 100644 index d8d831f49d..0000000000 --- a/sphinx/templates/getting_started/scripting/c_sharp/c_sharp_differences.pot +++ /dev/null @@ -1,508 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:4 -msgid "C# API differences to GDScript" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:6 -msgid "This is a (incomplete) list of API differences between C# and GDScript." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:9 -msgid "General differences" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:11 -msgid "As explained in the :ref:`doc_c_sharp`, C# generally uses ``PascalCase`` instead of the ``snake_case`` used in GDScript and C++." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:15 -msgid "Global scope" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:17 -msgid "Global functions and some constants had to be moved to classes, since C# does not allow declaring them in namespaces. Most global constants were moved to their own enums." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:22 -msgid "Constants" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:24 -msgid "Global constants were moved to their own enums. For example, ``ERR_*`` constants were moved to the ``Error`` enum." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:27 -msgid "Special cases:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:30 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:59 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:221 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:236 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:248 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:259 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:267 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:282 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:294 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:351 -msgid "GDScript" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:30 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:59 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:221 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:236 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:248 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:259 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:267 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:282 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:294 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:351 -msgid "C#" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:32 -msgid "``SPKEY``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:32 -msgid "``GD.SpKey``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:33 -msgid "``TYPE_*``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:33 -msgid "``Variant.Type`` enum" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:34 -msgid "``OP_*``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:34 -msgid "``Variant.Operator`` enum" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:38 -msgid "Math functions" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:40 -msgid "Math global functions, like ``abs``, ``acos``, ``asin``, ``atan`` and ``atan2``, are located under ``Mathf`` as ``Abs``, ``Acos``, ``Asin``, ``Atan`` and ``Atan2``. The ``PI`` constant can be found as ``Mathf.Pi``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:45 -msgid "Random functions" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:47 -msgid "Random global functions, like ``rand_range`` and ``rand_seed``, are located under ``GD``. Example: ``GD.RandRange`` and ``GD.RandSeed``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:51 -msgid "Other functions" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:53 -msgid "Many other global functions like ``print`` and ``var2str`` are located under ``GD``. Example: ``GD.Print`` and ``GD.Var2Str``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:56 -msgid "Exceptions:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:61 -msgid "``weakref(obj)``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:61 -msgid "``Object.WeakRef(obj)``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:62 -msgid "``is_instance_valid(obj)``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:62 -msgid "``Object.IsInstanceValid(obj)``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:66 -msgid "Tips" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:68 -msgid "Sometimes it can be useful to use the ``using static`` directive. This directive allows to access the members and nested types of a class without specifying the class name." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:71 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:92 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:154 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:165 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:177 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:335 -msgid "Example:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:86 -msgid "Export keyword" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:88 -msgid "Use the ``[Export]`` attribute instead of the GDScript ``export`` keyword. This attribute can also be provided with optional :ref:`PropertyHint` and ``hintString`` parameters. Default values can be set by assigning a value." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:114 -msgid "Signal keyword" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:116 -msgid "Use the ``[Signal]`` attribute to declare a signal instead of the GDScript ``signal`` keyword. This attribute should be used on a `delegate`, whose name signature will be used to define the signal." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:124 -msgid "See also: :ref:`doc_c_sharp_signals`." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:127 -msgid "`onready` keyword" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:129 -msgid "GDScript has the ability to defer the initialization of a member variable until the ready function is called with `onready` (cf. :ref:`doc_gdscript_onready_keyword`). For example:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:137 -msgid "However C# does not have this ability. To achieve the same effect you need to do this." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:149 -msgid "Singletons" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:151 -msgid "Singletons are available as static classes rather than using the singleton pattern. This is to make code less verbose than it would be with an ``Instance`` property." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:160 -msgid "However, in some very rare cases this is not enough. For example, you may want to access a member from the base class ``Godot.Object``, like ``Connect``. For such use cases we provide a static property named ``Singleton`` that returns the singleton instance. The type of this instance is ``Godot.Object``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:172 -msgid "String" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:174 -msgid "Use ``System.String`` (``string``). Most of Godot's String methods are provided by the ``StringExtensions`` class as extension methods." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:184 -msgid "There are a few differences, though:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:186 -msgid "``erase``: Strings are immutable in C#, so we cannot modify the string passed to the extension method. For this reason, ``Erase`` was added as an extension method of ``StringBuilder`` instead of string. Alternatively, you can use ``string.Remove``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:190 -msgid "``IsSubsequenceOf``/``IsSubsequenceOfi``: An additional method is provided, which is an overload of ``IsSubsequenceOf``, allowing you to explicitly specify case sensitivity:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:201 -msgid "``Match``/``Matchn``/``ExprMatch``: An additional method is provided besides ``Match`` and ``Matchn``, which allows you to explicitly specify case sensitivity:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:212 -msgid "Basis" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:214 -msgid "Structs cannot have parameterless constructors in C#. Therefore, ``new Basis()`` initializes all primitive members to their default value. Use ``Basis.Identity`` for the equivalent of ``Basis()`` in GDScript and C++." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:218 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:264 -msgid "The following method was converted to a property with a different name:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:223 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:239 -msgid "``get_scale()``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:223 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:239 -msgid "``Scale``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:227 -msgid "Transform2D" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:229 -msgid "Structs cannot have parameterless constructors in C#. Therefore, ``new Transform2D()`` initializes all primitive members to their default value. Please use ``Transform2D.Identity`` for the equivalent of ``Transform2D()`` in GDScript and C++." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:233 -msgid "The following methods were converted to properties with their respective names changed:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:238 -msgid "``get_rotation()``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:238 -msgid "``Rotation``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:243 -msgid "Plane" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:245 -msgid "The following method was converted to a property with a *slightly* different name:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:250 -msgid "``center()``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:250 -msgid "``Center``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:254 -msgid "Rect2" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:256 -msgid "The following field was converted to a property with a *slightly* different name:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:261 -msgid "``end``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:261 -msgid "``End``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:269 -msgid "``get_area()``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:269 -msgid "``Area``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:273 -msgid "Quat" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:275 -msgid "Structs cannot have parameterless constructors in C#. Therefore, ``new Quat()`` initializes all primitive members to their default value. Please use ``Quat.Identity`` for the equivalent of ``Quat()`` in GDScript and C++." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:279 -msgid "The following methods were converted to a property with a different name:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:284 -msgid "``length()``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:284 -msgid "``Length``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:285 -msgid "``length_squared()``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:285 -msgid "``LengthSquared``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:289 -msgid "Array" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:291 -msgid "*This is temporary. PoolArrays will need their own types to be used the way they are meant to.*" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:296 -msgid "``Array``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:296 -msgid "``Godot.Collections.Array``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:297 -msgid "``PoolIntArray``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:297 -msgid "``int[]``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:298 -msgid "``PoolByteArray``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:298 -msgid "``byte[]``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:299 -msgid "``PoolFloatArray``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:299 -msgid "``float[]``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:300 -msgid "``PoolStringArray``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:300 -msgid "``String[]``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:301 -msgid "``PoolColorArray``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:301 -msgid "``Color[]``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:302 -msgid "``PoolVector2Array``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:302 -msgid "``Vector2[]``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:303 -msgid "``PoolVector3Array``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:303 -msgid "``Vector3[]``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:306 -msgid "``Godot.Collections.Array`` is a type-safe wrapper around ``Godot.Collections.Array``. Use the ``Godot.Collections.Array(Godot.Collections.Array)`` constructor to create one." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:310 -msgid "Dictionary" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:312 -msgid "Use ``Godot.Collections.Dictionary``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:314 -msgid "``Godot.Collections.Dictionary`` is a type-safe wrapper around ``Godot.Collections.Dictionary``. Use the ``Godot.Collections.Dictionary(Godot.Collections.Dictionary)`` constructor to create one." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:318 -msgid "Variant" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:320 -msgid "``System.Object`` (``object``) is used instead of ``Variant``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:323 -msgid "Communicating with other scripting languages" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:325 -msgid "This is explained extensively in :ref:`doc_cross_language_scripting`." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:328 -msgid "Yield" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:330 -msgid "Something similar to GDScript's ``yield`` with a single parameter can be achieved with C#'s `yield keyword `_." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:333 -msgid "The equivalent of yield on signal can be achieved with async/await and ``Godot.Object.ToSignal``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:343 -msgid "Other differences" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:345 -msgid "``preload``, as it works in GDScript, is not available in C#. Use ``GD.Load`` or ``ResourceLoader.Load`` instead." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:348 -msgid "Other differences:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:353 -msgid "``Color8``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:353 -msgid "``Color.Color8``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:354 -msgid "``is_inf``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:354 -msgid "``float.IsInfinity``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:355 -msgid "``is_nan``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:355 -msgid "``float.IsNaN``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:356 -msgid "``dict2inst``" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:356 -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:357 -msgid "TODO" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_differences.rst:357 -msgid "``inst2dict``" -msgstr "" diff --git a/sphinx/templates/getting_started/scripting/c_sharp/c_sharp_exports.pot b/sphinx/templates/getting_started/scripting/c_sharp/c_sharp_exports.pot deleted file mode 100644 index e13b880a75..0000000000 --- a/sphinx/templates/getting_started/scripting/c_sharp/c_sharp_exports.pot +++ /dev/null @@ -1,237 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:4 -msgid "C# Exports" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:7 -msgid "Introduction to exports" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:9 -msgid "In Godot, class members can be exported. This means their value gets saved along with the resource (such as the :ref:`scene `) they're attached to. They will also be available for editing in the property editor. Exporting is done by using the ``[Export]`` attribute." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:22 -msgid "In that example the value ``5`` will be saved, and after building the current project it will be visible in the property editor. This way, artists and game designers can modify values that later influence how the program runs. For this, a special export syntax is provided." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:27 -msgid "Exporting can only be done with built-in types or objects derived from the :ref:`Resource class `." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:31 -msgid "Exporting properties can also be done in GDScript, for information on that see :ref:`doc_gdscript_exports`." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:35 -msgid "Basic use" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:37 -msgid "Exporting can work with and without setting a default value. For int and float ``0`` will then be used as the default." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:45 -msgid "Export works with resource types." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:54 -msgid "There are many resource types that can be used this way, try e.g. the following to list them:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:99 -msgid "Strings as paths" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:101 -msgid "Property hints can be used to export strings as paths" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:103 -msgid "String as a path to a file." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:110 -msgid "String as a path to a directory." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:117 -msgid "String as a path to a file, custom filter provided as hint." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:124 -msgid "Using paths in the global filesystem is also possible, but only in scripts in tool mode." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:127 -msgid "String as a path to a PNG file in the global filesystem." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:134 -msgid "String as a path to a directory in the global filesystem." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:141 -msgid "The multiline annotation tells the editor to show a large input field for editing over multiple lines." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:150 -msgid "Limiting editor input ranges" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:152 -msgid "Using the range property hint allows you to limit what can be input as a value using the editor." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:155 -msgid "Allow integer values from 0 to 20." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:162 -msgid "Allow integer values from -10 to 20." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:169 -msgid "Allow floats from -10 to 20 and snap the value to multiples of 0.2." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:176 -msgid "If you add the hints \"or_greater\" and/or \"or_lesser\" you can go above or below the limits when adjusting the value by typing it instead of using the slider." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:185 -msgid "Allow values 'y = exp(x)' where 'y' varies between 100 and 1000 while snapping to steps of 20. The editor will present a slider for easily editing the value. This only works with floats." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:195 -msgid "Floats with easing hint" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:197 -msgid "Display a visual representation of the 'ease()' function when editing." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:206 -msgid "Colors" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:208 -msgid "Regular color given as red-green-blue-alpha value." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:215 -msgid "Color given as red-green-blue value (alpha will always be 1)." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:223 -msgid "Nodes" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:225 -msgid "Nodes can't be directly exported. Instead you need to export a node path, then use that node path with ``GetNode()``." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:240 -msgid "Resources" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:247 -msgid "In the Inspector, you can then drag and drop a resource file from the FileSystem dock into the variable slot." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:250 -msgid "Opening the inspector dropdown may result in an extremely long list of possible classes to create, however. Therefore, if you specify an extension of Resource such as:" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:259 -msgid "The drop-down menu will be limited to AnimationNode and all its inherited classes." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:262 -msgid "It must be noted that even if the script is not being run while in the editor, the exported properties are still editable. This can be used in conjunction with a :ref:`script in \"tool\" mode `." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:267 -msgid "Exporting bit flags" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:269 -msgid "Integers used as bit flags can store multiple ``true``/``false`` (boolean) values in one property. By using the ``Flags`` property hint, they can be set from the editor." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:279 -msgid "You must provide a string description for each flag. In this example, ``Fire`` has value 1, ``Water`` has value 2, ``Earth`` has value 4 and ``Wind`` corresponds to value 8. Usually, constants should be defined accordingly (e.g. ``private const int ElementWind = 8`` and so on)." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:284 -msgid "Export annotations are also provided for the physics and render layers defined in the project settings." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:297 -msgid "Using bit flags requires some understanding of bitwise operations. If in doubt, use boolean variables instead." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:301 -msgid "Exporting arrays" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:303 -msgid "Exported arrays should be initialized empty." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:313 -msgid "You can omit the default value, but then it would be null if not assigned." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:320 -msgid "Arrays with specified types which inherit from resource can be set by drag-and-dropping multiple files from the FileSystem dock." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:330 -msgid "Arrays where the default value includes run-time values can't be exported." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:339 -msgid "Setting exported variables from a tool script" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:341 -msgid "When changing an exported variable's value from a script in :ref:`doc_gdscript_tool_mode`, the value in the inspector won't be updated automatically. To update it, call :ref:`property_list_changed_notify() ` after setting the exported variable's value." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:348 -msgid "Advanced exports" -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:350 -msgid "Not every type of export can be provided on the level of the language itself to avoid unnecessary design complexity. The following describes some more or less common exporting features which can be implemented with a low-level API." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:354 -msgid "Before reading further, you should get familiar with the way properties are handled and how they can be customized with :ref:`_set() `, :ref:`_get() `, and :ref:`_get_property_list() ` methods as described in :ref:`doc_accessing_data_or_logic_from_object`." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:361 -msgid "For binding properties using the above methods in C++, see :ref:`doc_binding_properties_using_set_get_property_list`." -msgstr "" - -#: ../../docs/getting_started/scripting/c_sharp/c_sharp_exports.rst:364 -msgid "The script must operate in the ``tool`` mode so the above methods can work from within the editor." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/animations.pot b/sphinx/templates/getting_started/step_by_step/animations.pot deleted file mode 100644 index a3d50d7f8e..0000000000 --- a/sphinx/templates/getting_started/step_by_step/animations.pot +++ /dev/null @@ -1,101 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/animations.rst:4 -msgid "Animations" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:7 -msgid "Introduction" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:9 -msgid "Godot's animation system is extremely powerful and flexible." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:11 -msgid "To begin, let's use the scene from the previous tutorial (:ref:`doc_splash_screen`). The goal is to add a \"fade-in\" animation to the splash image. Here's a copy just in case: :download:`robisplash.zip `." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:16 -msgid "Add an animation player" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:18 -msgid "First of all, add an :ref:`AnimationPlayer ` node to the scene as a child of \"background\" (the root node):" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:23 -msgid "When a node of this type is selected, the animation editor panel will appear:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:28 -msgid "The animation editor panel stays visible until manually hidden." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:31 -msgid "Creating the animation" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:33 -msgid "It's time to create a new animation! Press the Animation button then select new from the menu. Name the animation \"intro\" when the dialog appears." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:40 -msgid "Now that we have an animation, the property editor enters \"animation editing\" mode. In this mode, a key icon appears next to every property of the property editor. In Godot, any property of an object can be animated:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:48 -msgid "Editing the animation" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:50 -msgid "The logo will appear from the top of the screen." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:52 -msgid "With the animation editor panel open, select the \"logo\" node and set the \"Rect / Position\" property to ``(118, -400)`` and press the key button next to the property to add a keyframe:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:58 -msgid "When the dialog appears, confirm that you are creating a new track." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:60 -msgid "The keyframe will be added in the animation player editor:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:64 -msgid "Move the editor cursor forward in time by clicking here:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:68 -msgid "Change the logo position to ``(118, 0)`` and add a keyframe again. With two keyframes with different values, the animation happens." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:73 -msgid "Pressing \"Play selected animation from start\" button on the animation panel (or :kbd:`Shift + D` on keyboard) will make the logo descend." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:78 -msgid "Click the \"Autoplay on Load\" button to set the animation to start automatically when the scene starts." -msgstr "" - -#: ../../docs/getting_started/step_by_step/animations.rst:83 -msgid "And finally, when running the scene, the animation should look like this:" -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/index.pot b/sphinx/templates/getting_started/step_by_step/index.pot index 43dab8f93f..0b0938649f 100644 --- a/sphinx/templates/getting_started/step_by_step/index.pot +++ b/sphinx/templates/getting_started/step_by_step/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,3 +19,11 @@ msgstr "" #: ../../docs/getting_started/step_by_step/index.rst:2 msgid "Step by step" msgstr "" + +#: ../../docs/getting_started/step_by_step/index.rst:4 +msgid "This series builds upon the :ref:`Introduction to Godot ` and will get you started with the editor and the engine. You will learn more about nodes and scenes, code your first classes with GDScript, use signals to make nodes communicate with one another, and more." +msgstr "" + +#: ../../docs/getting_started/step_by_step/index.rst:9 +msgid "The following lessons are here to prepare you for :ref:`doc_your_first_2d_game`, a step-by-step tutorial where you will code a game from scratch. By the end of it, you will have the necessary foundations to explore more features in other sections. We also included links to pages that cover a given topic in-depth where appropriate." +msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/instancing.pot b/sphinx/templates/getting_started/step_by_step/instancing.pot index bef6aca904..4dcd1264eb 100644 --- a/sphinx/templates/getting_started/step_by_step/instancing.pot +++ b/sphinx/templates/getting_started/step_by_step/instancing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,105 +17,213 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: ../../docs/getting_started/step_by_step/instancing.rst:4 -msgid "Instancing" +msgid "Creating instances" msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:7 -msgid "Introduction" +#: ../../docs/getting_started/step_by_step/instancing.rst:6 +msgid "In the previous part, we saw that a scene is a collection of nodes organized in a tree structure, with a single node as its root. You can split your project into any number of scenes. This feature helps you break down and organize your game's different components." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:9 -msgid "Creating a single scene and adding nodes into it might work for small projects, but as a project grows in size and complexity, the number of nodes can quickly become unmanageable. To address this, Godot allows a project to be separated into any number of scenes. This provides you with a powerful tool that helps you organize the different components of your game." +#: ../../docs/getting_started/step_by_step/instancing.rst:11 +msgid "You can create as many scenes as you'd like and save them to the disk with the ``.tscn`` extension, which stands for \"text scene\". The ``Label.tscn`` file from the previous lesson was an example. We call those files \"Packed Scenes\" as they pack information about your scene's content." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:15 -msgid "In :ref:`doc_scenes_and_nodes` you learned that a scene is a collection of nodes organized in a tree structure, with a single node as the tree root." +#: ../../docs/getting_started/step_by_step/instancing.rst:16 +msgid "Here's the example of a ball. It's composed of a :ref:`RigidBody2D ` node as its root named Ball, which allows the ball to fall and bounce on walls, a :ref:`Sprite2D ` node, and a :ref:`CollisionShape2D `." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:20 -msgid "You can create as many scenes as you like and save them to disk. Scenes saved in this manner are called \"Packed Scenes\" and have a ``.tscn`` filename extension." +#: ../../docs/getting_started/step_by_step/instancing.rst:23 +msgid "Once you saved a scene, it works as a blueprint: you can reproduce it in other scenes as many times as you'd like. Replicating an object from a template like so is called **instancing**." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:26 -msgid "Once a scene has been saved, it can be instanced into another scene as if it were any other node." +#: ../../docs/getting_started/step_by_step/instancing.rst:29 +msgid "As we mentioned in the previous part, instanced scenes behave like a node: the editor hides their content by default. When you instance the Ball, you only see the Ball node. Notice also how each duplicate has a unique name." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:31 -msgid "In the above picture, Scene B was added to Scene A as an instance." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing.rst:34 -msgid "Instancing by example" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing.rst:36 -msgid "To learn how instancing works, let's start by downloading a sample project: :download:`instancing.zip `." +#: ../../docs/getting_started/step_by_step/instancing.rst:33 +msgid "Every instance of the Ball scene starts with the same structure and properties as ``Ball.tscn``. However, you can modify each independently, such as changing how they bounce, how heavy they are, or any property exposed by the source scene." msgstr "" #: ../../docs/getting_started/step_by_step/instancing.rst:39 -msgid "Unzip this project anywhere you like. Then open Godot and add this project to the project manager using the 'Import' button:" +msgid "In practice" msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:44 -msgid "Browse to the folder you extracted and open the \"project.godot\" file you can find inside it. After doing this, the new project will appear on the list of projects. Edit the project by pressing the 'Edit' button." +#: ../../docs/getting_started/step_by_step/instancing.rst:41 +msgid "Let's use instancing in practice to see how it works exactly in Godot. We invite you to download the ball's sample project we prepared for you: :download:`instancing.zip `." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:48 -msgid "This project contains two scenes: \"Ball.tscn\" and \"Main.tscn\". The ball scene uses a :ref:`RigidBody2D ` to provide physics behavior while the main scene has a set of obstacles for the ball to collide with (using :ref:`StaticBody2D `)." +#: ../../docs/getting_started/step_by_step/instancing.rst:45 +msgid "Extract the archive on your computer. Then, open Godot, and in the project manager, click the Import button to import the project." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:57 -msgid "Open the ``Main`` scene, and then select the root node:" +#: ../../docs/getting_started/step_by_step/instancing.rst:50 +msgid "In the pop-up that appears, click the browse button and navigate to the folder you extracted." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:61 -msgid "We want to add an instance of the ``Ball`` scene as a child of ``Main``. Click the \"link\"-shaped button (its hover-text says \"Instance a scene file as a Node.\") and select the ``Ball.tscn`` file." +#: ../../docs/getting_started/step_by_step/instancing.rst:55 +msgid "Double-click the ``project.godot`` file to open it." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:67 -msgid "The ball will be placed at the top-left corner of the screen area (this is ``(0, 0)`` in screen coordinates). Click and drag the ball somewhere near the top-center of the scene:" +#: ../../docs/getting_started/step_by_step/instancing.rst:59 +msgid "Finally, click the Import & Edit button." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:73 -msgid "Press \"Play\" and watch the ball fall to the bottom of the screen:" +#: ../../docs/getting_started/step_by_step/instancing.rst:63 +msgid "The project contains two packed scenes: ``Main.tscn``, containing walls against which the ball collides, and ``Ball.tscn``. The Main scene should open automatically." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:78 -msgid "Multiple instances" +#: ../../docs/getting_started/step_by_step/instancing.rst:69 +msgid "Let's add a ball as a child of the Main node. In the Scene dock, select the Main node. Then, click the link icon at the top of the scene dock. This button allows you to add an instance of a scene as a child of the currently selected node." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:80 -msgid "You can add as many instances as you like to a scene, either by using the \"Instance\" button again, or by clicking on the ball instance and pressing :kbd:`Ctrl + D` (:kbd:`Cmd + D` on macOS) to duplicate it:" +#: ../../docs/getting_started/step_by_step/instancing.rst:75 +msgid "Double-click the ball scene to instance it." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:86 -msgid "Run the scene again and all of the balls will fall." +#: ../../docs/getting_started/step_by_step/instancing.rst:79 +msgid "The ball appears in the top-left corner of the viewport." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:91 -msgid "Editing instances" +#: ../../docs/getting_started/step_by_step/instancing.rst:83 +msgid "Click on it and drag it towards the center of the view." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:93 -msgid "Open the ``Ball`` scene, expand the ``PhysicsMaterial`` by clicking on it, and set the ``Bounce`` property to ``1``." +#: ../../docs/getting_started/step_by_step/instancing.rst:87 +msgid "Play the game by pressing F5. You should see it fall." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:98 -msgid "Press \"Play\" and notice that all of the instanced balls are now much more bouncy. Because the instanced balls are based on the saved scene, changes to that scene will affect all instances." +#: ../../docs/getting_started/step_by_step/instancing.rst:89 +msgid "Now, we want to create more instances of the Ball node. With the ball still selected, press :kbd:`Ctrl-D` (:kbd:`Cmd-D` on macOS) to call the duplicate command. Click and drag to move the new ball to a different location." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:102 -msgid "You can also adjust individual instances. Set the bounce value back to ``0`` and then in the ``Main`` scene, select one of the instanced balls. Resources like ``PhysicsMaterial`` are shared between instances by default, so we need to make it unique. Click on the tools button in the top-right of the Inspector dock and select \"Make Sub-Resources Unique\". Set its ``Bounce`` to ``1`` and press \"Play\"." +#: ../../docs/getting_started/step_by_step/instancing.rst:95 +msgid "You can repeat this process until you have several in the scene." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:111 -msgid "Notice that a grey \"revert\" button appears next to the adjusted property. When this button is present, it means you modified a property in the instanced scene to override its value in the saved scene. Even if that property is modified in the original scene, the custom value will remain. Pressing the revert button will restore the property to the value in the saved scene." +#: ../../docs/getting_started/step_by_step/instancing.rst:99 +msgid "Play the game again. You should now see every ball fall independently from one another. This is what instances do. Each is an independent reproduction of a template scene." msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:119 -msgid "Conclusion" +#: ../../docs/getting_started/step_by_step/instancing.rst:104 +msgid "Editing scenes and instances" msgstr "" -#: ../../docs/getting_started/step_by_step/instancing.rst:121 -msgid "Instancing can be useful when you want to create many copies of the same object. It is also possible to create instances in code by using GDScript, see :ref:`doc_instancing_continued`." +#: ../../docs/getting_started/step_by_step/instancing.rst:106 +msgid "There is more to instances. With this feature, you can:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:108 +msgid "Change the properties of one ball without affecting the others using the Inspector." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:110 +msgid "Change the default properties of every Ball by opening ``Ball.tscn`` scene and making a change to the Ball node there. Upon saving, all instances of the Ball in the project will see their values update." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:114 +msgid "Changing a property on an instance always overrides values from the corresponding packed scene." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:117 +msgid "Let's try this. Open ``Ball.tscn`` and select the Ball node. In the Inspector on the right, click on the PhysicsMaterial property to expand it." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:122 +msgid "Set its Bounce property to ``2`` by clicking on the number field, typing ``2``, and pressing :kbd:`Enter`." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:127 +msgid "Play the game by pressing :kbd:`F5` and notice how all balls now bounce a lot more. As the Ball scene is a template for all instances, modifying it and saving causes all instances to update accordingly." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:131 +msgid "Let's now adjust an individual instance. Head back to the Main scene by clicking on the corresponding tab above the viewport." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:136 +msgid "Select one of the instanced Ball nodes and, in the Inspector, set its Gravity Scale value to ``10``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:141 +msgid "A grey \"revert\" button appears next to the adjusted property." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:145 +msgid "This icon indicates you are overriding a value from the source packed scene. Even if you modify the property in the original scene, the value override will be preserved in the instance. Clicking the revert icon will restore the property to the value in the saved scene." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:150 +msgid "Rerun the game and notice how this ball now falls much faster than the others." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:152 +msgid "If you change a value on the ``PhysicsMaterial`` of one instance, it will affect all the others. This is because ``PhysicsMaterial`` is a resource, and resources are shared between instances. To make a resource unique for one instance, right-click on it in the Inspector and click Make Unique in the contextual menu." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:158 +msgid "Resources are another essential building block of Godot games we will cover in a later lesson." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:162 +msgid "Scene instances as a design language" +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:164 +msgid "Instances and scenes in Godot offer an excellent design language, setting the engine apart from others out there. We designed Godot around this concept from the ground up." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:168 +msgid "We recommend dismissing architectural code patterns when making games with Godot, such as Model-View-Controller (MVC) or Entity-Relationship diagrams. Instead, you can start by imagining the elements players will see in your game and structure your code around them." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:173 +msgid "For example, you could break down a shooter game like so:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:177 +msgid "You can come up with a diagram like this for almost any type of game. Each rectangle represents an entity that's visible in the game from the player's perspective. The arrows tell you which scene owns which." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:181 +msgid "Once you have a diagram, we recommended creating a scene for each element listed in it to develop your game. You'll use instancing, either by code or directly in the editor, to build your tree of scenes." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:185 +msgid "Programmers tend to spend a lot of time designing abstract architectures and trying to fit components into it. Designing based on scenes makes development faster and more straightforward, allowing you to focus on the game logic itself. Because most game components map directly to a scene, using a design based on scene instantiation means you need little other architectural code." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:191 +msgid "Here's the example of a scene diagram for an open-world game with tons of assets and nested elements:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:196 +msgid "Imagine we started by creating the room. We could make a couple of different room scenes, with unique arrangements of furniture in them. Later, we could make a house scene that uses multiple room instances for the interior. We would create a citadel out of many instanced houses and a large terrain on which we would place the citadel. Each of these would be a scene instancing one or more sub-scenes." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:202 +msgid "Later, we could create scenes representing guards and add them to the citadel. They would be indirectly added to the overall game world." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:205 +msgid "With Godot, it's easy to iterate on your game like this, as all you need to do is create and instantiate more scenes. We designed the editor to be accessible to programmers, designers, and artists alike. A typical team development process can involve 2D or 3D artists, level designers, game designers, and animators, all working with the Godot editor." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:212 +msgid "Summary" +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:214 +msgid "Instancing, the process of producing an object from a blueprint has many handy uses. With scenes, it gives you:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:217 +msgid "The ability to divide your game into reusable components." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:218 +msgid "A tool to structure and encapsulate complex systems." +msgstr "" + +#: ../../docs/getting_started/step_by_step/instancing.rst:219 +msgid "A language to think about your game project's structure in a natural way." msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/instancing_continued.pot b/sphinx/templates/getting_started/step_by_step/instancing_continued.pot deleted file mode 100644 index 4e722af744..0000000000 --- a/sphinx/templates/getting_started/step_by_step/instancing_continued.pot +++ /dev/null @@ -1,101 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:4 -msgid "Instancing (continued)" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:7 -msgid "Recap" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:9 -msgid "Instancing has many handy uses. At a glance, with instancing you have:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:11 -msgid "The ability to subdivide scenes and make them easier to manage." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:12 -msgid "A tool to manage and edit multiple node instances at once." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:13 -msgid "A way to organize and embed complex game flows or even UIs (in Godot, UI Elements are nodes, too)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:17 -msgid "Design language" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:19 -msgid "But the greatest strength that comes with instancing scenes is that it works as an excellent design language. This distinguishes Godot from all the other engines out there. Godot was designed from the ground up around this concept." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:24 -msgid "When making games with Godot, the recommended approach is to dismiss most common design patterns, such as MVC or Entity-Relationship diagrams, and instead think about your scenes in a more natural way. Start by imagining the visible elements in your game, the ones that can be named not just by a programmer, but by anyone." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:30 -msgid "For example, here's how a simple shooter game could be imagined:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:34 -msgid "You can come up with a diagram like this for almost any kind of game. Write down the parts of the game that you can visualize, and then add arrows to represent ownership of one component by another." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:38 -msgid "Once you have a diagram like this, the recommended process for making a game is to create a scene for each element listed in the diagram. You'll use instancing (either by code or directly in the editor) for the ownership relationships." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:42 -msgid "A lot of time spent in programming games (or software in general) is on designing an architecture and fitting game components to that architecture. Designing based on scenes replaces that approach and makes development much faster and more straightforward, allowing you to concentrate on the game logic itself. Because most game components map directly to a scene, using a design based on scene instantiation means little other architectural code is needed." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:48 -msgid "Let's take a look at one more, somewhat more complex, example of an open-world type game with lots of assets and nested elements:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:53 -msgid "Take a look at the room element. Let's say we started there. We could make a couple of different room scenes, with different arrangements of furniture (also scenes) in them. Later, we could make a house scene, connecting rooms to make up its interior." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:58 -msgid "Then, we could make a citadel scene, which is made out of many instanced houses. Then, we could start working on the world map terrain, adding the citadel onto it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:62 -msgid "Later, we could create scenes that represent guards (and other NPCs) and add them to the citadel as well. As a result, they would be indirectly added to the overall game world." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:66 -msgid "With Godot, it's easy to iterate on your game like this, as all you need to do is create and instance more scenes. Furthermore, the editor UI is designed to be user friendly for programmers and non-programmers alike. A typical team development process can involve 2D or 3D artists, level designers, game designers, and animators, all working with the editor interface." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:73 -msgid "Information overload!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:75 -msgid "This has been a lot of high level information dropped on you all at once. However, the important part of this tutorial was to create an awareness of how scenes and instancing are used in real projects." -msgstr "" - -#: ../../docs/getting_started/step_by_step/instancing_continued.rst:79 -msgid "Everything discussed here will become second nature to you once you start making games and putting these concepts into practice. For now, don't worry about it too much, and go on to the next tutorial!" -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/intro_to_the_editor_interface.pot b/sphinx/templates/getting_started/step_by_step/intro_to_the_editor_interface.pot deleted file mode 100644 index d65597b388..0000000000 --- a/sphinx/templates/getting_started/step_by_step/intro_to_the_editor_interface.pot +++ /dev/null @@ -1,181 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:4 -msgid "Introduction to Godot's editor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:6 -msgid "This tutorial will run you through Godot's interface. We're going to look at the **Project Manager, docks, workspaces** and everything you need to know to get started with the engine." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:10 -msgid "You can `download Godot Engine here `_." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:13 -msgid "Project manager" -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:15 -msgid "When you launch Godot, the first window you'll see is the Project Manager. Since you have no projects there will be a popup asking if you want to open the asset library, just click cancel, we'll look at it later." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:21 -msgid "Now you should see the project manager. It lets you create, remove, import or play game projects." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:26 -msgid "In the top-right corner you'll find a drop-down menu to change the editor's language." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:31 -msgid "From the **Templates** tab you can download open source project templates and demos from the Asset Library to help you get started faster. Just select the template or demo you want, click download, once it's finished downloading click install and choose where you want the project to go. You can learn more about it in :ref:`doc_what_is_assetlib`." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:40 -msgid "Create or import a project" -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:42 -msgid "To create a new project, click the ``New Project`` button on the right. Here you give it a name, choose an empty folder on your computer to save it to, and choose a renderer." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:48 -msgid "Click the Browse button to open Godot's file browser and pick a location or type the folder's path in the Project Path field." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:53 -msgid "When you see the green tick on the right, it means the engine detects an empty folder. You can also click the ``Create Folder`` button next to your project name and an empty folder will be created with that name for the project." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:57 -msgid "Finally, you need to choose which renderer to use (OpenGL ES 3.0 or OpenGL ES 2.0). The advantages and disadvantages of each are listed to help you choose, and you can refer to :ref:`doc_gles2_gles3_differences` for more details. Note that you can change the backend from the project settings if you change your mind later on. For this tutorial either backend is fine." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:63 -msgid "Once you are done click ``Create & Edit``. Godot will create the project for you and open it in the editor." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:66 -msgid "The next time you open the project manager, you'll see your new project in the list. Double click on it to open it in the editor." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:71 -msgid "You can import existing projects in a similar way, using the Import button. Locate the folder that contains the project or the ``project.godot`` file to import and edit it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:77 -msgid "When the folder path is correct, you'll see a green checkmark." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:82 -msgid "Your first look at Godot's editor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:84 -msgid "Welcome to Godot! With your project open, you should see the editor's interface with menus along the top of the interface and docks along the far extremes of the interface on either side of the viewport." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:90 -msgid "At the top, from left to right, you can see the **main menus**, the **workspaces**, and the **playtest buttons**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:93 -msgid "The **FileSystem dock** is where you'll manage your project files and assets." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:97 -msgid "The **Scene dock** lists the active scene's content and the **Inspector** allows for the management of the properties of a scene's content." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:102 -msgid "In the center, you have the **Toolbar** at the top, where you'll find tools to move, scale or lock your scene's objects. It changes as you jump to different workspaces." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:108 -msgid "The **Bottom Panel** is the host for the debug console, the animation editor, the audio mixer… They are wide and can take precious space. That's why they're folded by default." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:115 -msgid "The workspaces" -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:117 -msgid "You can see four workspace buttons at the top: 2D, 3D, Script and AssetLib." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:120 -msgid "You'll use the **2D workspace** for all types of games. In addition to 2D games, the 2D workspace is where you'll build your interfaces. Press :kbd:`Ctrl + F1` (or :kbd:`Alt + 1` on macOS) to access it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:126 -msgid "In the **3D workspace**, you can work with meshes, lights, and design levels for 3D games. Press :kbd:`Ctrl + F2` (or :kbd:`Alt + 2` on macOS) to access it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:131 -msgid "Notice the perspective button under the toolbar, it opens a list of options related to the 3D viewport." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:136 -msgid "Read :ref:`doc_introduction_to_3d` for more detail about **3D workspace**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:138 -msgid "The **Script** workspace is a complete code editor with a debugger, rich auto-completion, and built-in code reference. Press :kbd:`Ctrl + F3` (or :kbd:`Alt + 3` on macOS) to access it, and :kbd:`F1` (or :kbd:`Alt + Space` on macOS) to search the reference." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:144 -msgid "To search for information about a class, method, property, constant, or signal in the engine while you are writing a script, press the \"Search Help\" button at the top right of the Script workspace." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:150 -msgid "A new window will pop up. Search for the item that you want to find information about." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:155 -msgid "Click on the item you are looking for and press open. The documentation for the item will be displayed in the script workspace." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:160 -msgid "Finally, the **AssetLib** is a library of free and open source add-ons, scripts and assets to use in your projects." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:164 -msgid "Modify the interface" -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:166 -msgid "Godot's interface lives in a single window. You cannot split it across multiple screens although you can work with an external code editor like Atom or Visual Studio Code for instance." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:171 -msgid "Move and resize docks" -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:173 -msgid "Click and drag on the edge of any dock or panel to resize it horizontally or vertically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:178 -msgid "Click the three-dotted icon at the top of any dock to change its location." -msgstr "" - -#: ../../docs/getting_started/step_by_step/intro_to_the_editor_interface.rst:183 -msgid "Go to the ``Editor`` menu and ``Editor Settings`` to fine-tune the look and feel of the editor." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/nodes_and_scenes.pot b/sphinx/templates/getting_started/step_by_step/nodes_and_scenes.pot new file mode 100644 index 0000000000..53f2b55dd3 --- /dev/null +++ b/sphinx/templates/getting_started/step_by_step/nodes_and_scenes.pot @@ -0,0 +1,213 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:6 +msgid "Nodes and Scenes" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:8 +msgid "In :ref:`doc_key_concepts_overview`, we saw that a Godot game is a tree of scenes and that each scene is a tree of nodes. In this lesson, we explain a bit more about them. You will also create your first scene." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:13 +msgid "Nodes" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:15 +msgid "**Nodes are the fundamental building blocks of your game**. They are like the ingredients in a recipe. There are dozens of kinds that can display an image, play a sound, represent a camera, and much more." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:21 +msgid "All nodes have the following attributes:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:23 +msgid "A name." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:24 +msgid "Editable properties." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:25 +msgid "They receive callbacks to update every frame." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:26 +msgid "You can extend them with new properties and functions." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:27 +msgid "You can add them to another node as a child." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:29 +msgid "The last attribute is key. **Together, nodes form a tree**, which is a powerful feature to organize projects. Since different nodes have different functions, combining them produces more complex behavior. As we saw before, you can build a playable character the camera follows using a kinematic body node named \"Character\", a sprite node, a camera node, and a collision shape node." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:38 +msgid "Scenes" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:40 +msgid "When you organize nodes in a tree, like our character, we call this construct a scene. Once saved, scenes work like new node types in the editor, where you can add them as a child of an existing node. In that case, the instance of the scene appears as a single node with its internals hidden." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:45 +msgid "Scenes allow you to structure your game's code however you want. You can **compose nodes** to create custom and complex node types, like a game character that runs and jumps, a life bar, a chest with which you can interact, and more." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:51 +msgid "The Godot editor essentially is a **scene editor**. It has plenty of tools for editing 2D and 3D scenes, as well as user interfaces. A Godot project can contain as many of these scenes as you need. The engine only requires one as your application's **main scene**. This is the scene Godot will first load when you or a player runs the game." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:57 +msgid "On top of acting like nodes, scenes have the following attributes:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:59 +msgid "They always have one root node, like the \"Character\" in our example." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:60 +msgid "You can save them to your hard drive and load them later." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:61 +msgid "You can create as many instances of a scene as you'd like. You could have five or ten characters in your game, created from your Character scene." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:65 +msgid "Creating your first scene" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:67 +msgid "Let's create our first scene with a single node. To do so, you will need to create a new project first. After opening the project, you should see an empty editor." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:73 +msgid "In an empty scene, the Scene dock on the left shows several options to add a root node quickly. \"2D Scene\" adds a Node2D node, \"3D Scene\" adds a Spatial node, \"User Interface\" adds a Control node, and \"Other Node\" lets you select any node. It is equivalent to pressing the \"Add Child Node\" button. These presets are here for convenience; they are not mandatory." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:79 +msgid "We're going to add a single Label node to our scene. Its function is to draw text on the screen." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:82 +msgid "Press the \"Add Child Node\" button at the top left of the Scene dock to create a node. This button adds the chosen node as a child of the currently selected one or, in an empty scene, as the root." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:88 +msgid "The Create Node dialog opens, showing the long list of available nodes." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:92 +msgid "Select the Label node. You can type its name to filter down the list." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:96 +msgid "Click on the Label node to select it and click the Create button at the bottom of the window." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:101 +msgid "A lot happens when you add a scene's first node. The scene changes to the 2D workspace because Label is a 2D node type. The Label appears, selected, in the top-left corner of the viewport. The node appears in the Scene dock on the left, and the node's properties appear in the Inspector dock on the right." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:107 +msgid "Changing a node's properties" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:109 +msgid "The next step is to change the Label's \"Text\" property. Let's change it to \"Hello World\"." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:112 +msgid "Head to the Inspector dock on the right of the viewport. Click inside the field below the Text property and type \"Hello World\"." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:117 +msgid "You will see the text draw in the viewport as you type." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:119 +msgid "You can move your Label node in the viewport by selecting the move tool in the toolbar." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:124 +msgid "With the Label selected, click and drag anywhere in the viewport to move it to the center of the view delimited by the rectangle." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:130 +msgid "Running the scene" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:132 +msgid "Everything's ready to run the scene! Press the Play Scene button in the top-right of the screen or press :kbd:`F6`." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:137 +msgid "A popup invites you to save the scene, which is required to run it." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:141 +msgid "Click the Yes button, and in the file browser that appears, press the Save button to save it as \"Label.tscn\"." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:146 +msgid "The Save Scene As dialog, like other file dialogs in the editor, only allows you to save files inside the project. The ``res://`` path at the top of the window represents the project's root directory and stands for \"resource path\". For more information about file paths in Godot, see :ref:`doc_filesystem`." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:152 +msgid "The application should open in a new window and display the text \"Hello World\"." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:156 +msgid "Close the window or press :kbd:`F8` to quit the running scene." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:160 +msgid "If this doesn't immediately work and you have a hiDPI display on at least one of your monitors, go to Project -> Project Settings -> Display -> Window then enable Allow Hidpi under Dpi." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:165 +msgid "Setting the main scene" +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:167 +msgid "To run our test scene, we used the Play Scene button. Another button next to it allows you to set and run the project's main scene. You can press :kbd:`F5` to do so." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:173 +msgid "A popup window appears and invites you to select the main scene." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:177 +msgid "Click the Select button, and in the file dialog that appears, double click on Label.tscn." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:182 +msgid "The demo should run again. Moving forward, every time you run the project, Godot will use this scene as a starting point." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:185 +msgid "The editor saves the main scene's path in a project.godot file in your project's directory. While you can edit this text file directly to change project settings, you can also use the \"Project -> Project Settings\" window to do so." +msgstr "" + +#: ../../docs/getting_started/step_by_step/nodes_and_scenes.rst:190 +msgid "In the next part, we will discuss another key concept in games and in Godot: creating instances of a scene." +msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/scenes_and_nodes.pot b/sphinx/templates/getting_started/step_by_step/scenes_and_nodes.pot deleted file mode 100644 index c254fbfddd..0000000000 --- a/sphinx/templates/getting_started/step_by_step/scenes_and_nodes.pot +++ /dev/null @@ -1,233 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:4 -msgid "Scenes and nodes" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:7 -msgid "Introduction" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:11 -msgid "Imagine for a second that you are not a game developer anymore. Instead, you're a chef! Change your hipster outfit for a toque and a double breasted jacket. Now, instead of making games, you create new and delicious recipes for your guests." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:16 -msgid "So, how does a chef create a recipe? Recipes are divided into two sections: the first is the ingredients and the second is the instructions to prepare it. This way, anyone can follow the recipe and savor your magnificent creation." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:21 -msgid "Making games in Godot feels pretty much the same way. Using the engine feels like being in a kitchen. In this kitchen, *nodes* are like a refrigerator full of fresh ingredients with which to cook." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:25 -msgid "There are many types of nodes. Some show images, others play sound, other nodes display 3D models, etc. There are dozens of them." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:29 -msgid "Nodes" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:31 -msgid "But let's start with the basics. Nodes are fundamental building blocks for creating a game. As mentioned above, a node can perform a variety of specialized functions. However, any given node always has the following attributes:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:35 -msgid "It has a name." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:36 -msgid "It has editable properties." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:37 -msgid "It can receive a callback to process every frame." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:38 -msgid "It can be extended (to have more functions)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:39 -msgid "It can be added to another node as a child." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:43 -msgid "The last one is important. Nodes can have other nodes as children. When arranged in this way, the nodes become a **tree**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:46 -msgid "In Godot, the ability to arrange nodes in this way creates a powerful tool for organizing projects. Since different nodes have different functions, combining them allows for the creation of more complex functions." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:50 -msgid "Don't worry if this doesn't click yet. We will continue to explore this over the next few sections. The most important fact to remember for now is that nodes exist and can be arranged this way." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:55 -msgid "Scenes" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:59 -msgid "Now that the concept of nodes has been defined, the next logical step is to explain what a Scene is." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:62 -msgid "A scene is composed of a group of nodes organized hierarchically (in tree fashion). Furthermore, a scene:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:65 -msgid "always has one root node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:66 -msgid "can be saved to disk and loaded back." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:67 -msgid "can be *instanced* (more on that later)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:69 -msgid "Running a game means running a scene. A project can contain several scenes, but for the game to start, one of them must be selected as the main scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:72 -msgid "Basically, the Godot editor is a **scene editor**. It has plenty of tools for editing 2D and 3D scenes as well as user interfaces, but the editor is based on the concept of editing a scene and the nodes that compose it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:77 -msgid "Editor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:79 -msgid "Open the project you made in :ref:`doc_intro_to_the_editor_interface`, or create a new one. This will open the Godot editor:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:84 -msgid "As mentioned before, making games in Godot feels like being in a kitchen, so let's open the refrigerator and add some fresh nodes to the project. We'll begin with a \"Hello World\" message that we'll put on the screen." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:89 -msgid "To do this we need to add a Label node. Press the \"Add Child Node\" button at the top left of the scene dock (the icon represents a plus symbol). This button is the main way to add new nodes to a scene, and will always add the chosen node as a child of the currently selected node (or, in an empty scene, as the \"root\" node)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:97 -msgid "In an empty scene (without root node), the scene dock shows several options to quickly add a root node to the scene. \"2D Scene\" adds a Node2D node, \"3D Scene\" adds a Spatial node, \"User Interface\" adds a Control node, and \"Other Node\" which lets you select any node (so it is equivalent to pressing the \"Add Child Node\" button). You can also press the star-shaped icon to toggle the display of your favorited nodes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:105 -msgid "Note that these presets are here for convenience and are not mandatory for the different types of scenes. Not every 3D scene needs a Spatial node as its root node, likewise not every GUI or 2D scene needs a Control node or Node2D as their root node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:110 -msgid "Now, to add a label node to this scene you can click on the Other Node button or the Add Node button at the top. In scenes that aren't empty you use the add node button to create every child node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:116 -msgid "This will open the Create Node dialog, showing the long list of nodes that can be created:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:121 -msgid "From there, select the \"Label\" node first. Searching for it is probably the fastest way:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:126 -msgid "And finally, create the Label! A lot happens when Create is pressed:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:130 -msgid "First of all, the scene changes to the 2D editor (because Label is a 2D Node type), and the Label appears, selected, at the top left corner of the viewport." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:133 -msgid "The node appears in the scene tree editor in the Scene dock, and the label properties appear in the Inspector dock." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:136 -msgid "The next step will be to change the \"Text\" Property of the label. Let's change it to \"Hello World\":" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:141 -msgid "Ok, everything's ready to run the scene! Press the PLAY SCENE Button on the top bar (or hit :kbd:`F6`):" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:146 -msgid "Aaaand... Oops." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:150 -msgid "Scenes need to be saved to be run, so save the scene to something like Hello.tscn in Scene -> Save:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:155 -msgid "And here's when something funny happens. The file dialog is a special file dialog, and only allows you to save inside the project. The project root is ``res://`` which means \"resource path\". This means that files can only be saved inside the project. For the future, when doing file operations in Godot, remember that ``res://`` is the resource path, and no matter the platform or install location, it is the way to locate where resource files are from inside the game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:163 -msgid "After saving the scene and pressing run scene again, the \"Hello World\" demo should finally execute:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:168 -msgid "Success!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:172 -msgid "If this doesn't immediately work and you have a hiDPI display on at least one of your monitors, go to **Project → Project Settings → Display → Window** then enable **Allow Hidpi** under **Dpi**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:180 -msgid "Configuring the project" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:182 -msgid "Ok, it's time to configure the project. Right now, the only way to run something is to execute the current scene. Projects, however, may have several scenes, so one of them must be set as the main scene. This is the scene that will be loaded any time the project is run." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:187 -msgid "These settings are all stored in a project.godot file, which is a plaintext file in win.ini format (for easy editing). There are dozens of settings that you can change in this file to alter how a project executes. To simplify this process, Godot provides a project settings dialog, which acts as a sort of frontend to editing a project.godot file." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:193 -msgid "To access that dialog, select Project -> Project Settings. Try it now." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:195 -msgid "Once the window opens, let's select a main scene. Locate the `Application/Run/Main Scene` property and click on it to select 'Hello.tscn'." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:200 -msgid "Now, with this change, when you press the regular Play button (or F5), this scene will run, no matter which scene is actively being edited." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:203 -msgid "The project settings dialog provides a lot of options that can be saved to a project.godot file and shows their default values. If you change a value, a tick is marked to the left of its name. This means that the property will be saved to the project.godot file and remembered." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:208 -msgid "As a side note, it is also possible to add custom configuration options and read them in at run-time using the :ref:`ProjectSettings ` singleton." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:212 -msgid "To be continued..." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scenes_and_nodes.rst:214 -msgid "This tutorial talked about \"scenes and nodes\", but so far there has been only *one* scene and *one* node! Don't worry, the next tutorial will expand on that..." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/scripting.pot b/sphinx/templates/getting_started/step_by_step/scripting.pot deleted file mode 100644 index e7f633b02b..0000000000 --- a/sphinx/templates/getting_started/step_by_step/scripting.pot +++ /dev/null @@ -1,317 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/scripting.rst:4 -msgid "Scripting" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:7 -msgid "Introduction" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:9 -msgid "Before Godot 3.0, the only choice for scripting a game was to use :ref:`GDScript`. Nowadays, Godot has four (yes, four!) official languages and the ability to add extra scripting languages dynamically!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:13 -msgid "This is great, mostly due to the large amount of flexibility provided, but it also makes our work supporting languages more difficult." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:16 -msgid "The \"main\" languages in Godot, though, are GDScript and VisualScript. The main reason to choose them is their level of integration with Godot, as this makes the experience smoother; both have slick editor integration, while C# and C++ need to be edited in a separate IDE. If you are a big fan of statically typed languages, go with C# and C++ instead." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:22 -msgid "GDScript" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:24 -msgid ":ref:`GDScript` is, as mentioned above, the main language used in Godot. Using it has some positive points compared to other languages due to its high integration with Godot:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:28 -msgid "It's simple, elegant, and designed to be familiar for users of other languages such as Lua, Python, Squirrel, etc." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:29 -msgid "Loads and compiles blazingly fast." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:30 -msgid "The editor integration is a pleasure to work with, with code completion for nodes, signals, and many other items pertaining to the scene being edited." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:31 -msgid "Has vector types built-in (such as Vectors, transforms, etc.), making it efficient for heavy use of linear algebra." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:32 -msgid "Supports multiple threads as efficiently as statically typed languages - one of the limitations that made us avoid VMs such as Lua, Squirrel, etc." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:33 -msgid "Uses no garbage collector, so it trades a small bit of automation (most objects are reference counted anyway), by determinism." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:34 -msgid "Its dynamic nature makes it easy to optimize sections of code in C++ (via GDNative) if more performance is required, all without recompiling the engine." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:36 -msgid "If you're undecided and have experience with programming, especially dynamically typed languages, go for GDScript!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:40 -msgid "VisualScript" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:42 -msgid "Beginning with 3.0, Godot offers :ref:`Visual Scripting`. This is a typical implementation of a \"blocks and connections\" language, but adapted to how Godot works." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:46 -msgid "Visual scripting is a great tool for non-programmers, or even for experienced developers who want to make parts of the code more accessible to others, like game designers or artists." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:50 -msgid "It can also be used by programmers to build state machines or custom visual node workflows - for example, a dialogue system." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:55 -msgid ".NET / C#" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:57 -msgid "As Microsoft's C# is a favorite amongst game developers, we have added official support for it. C# is a mature language with tons of code written for it, and support was added thanks to a generous donation from Microsoft." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:62 -msgid "It has an excellent tradeoff between performance and ease of use, although one must be aware of its garbage collector." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:65 -msgid "Since Godot uses the `Mono `_ .NET runtime, in theory any third-party .NET library or framework can be used for scripting in Godot, as well as any Common Language Infrastructure-compliant programming language, such as F#, Boo or ClojureCLR. In practice however, C# is the only officially supported .NET option." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:71 -msgid "GDNative / C++" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:73 -msgid "Finally, one of our brightest additions for the 3.0 release: GDNative allows scripting in C++ without needing to recompile (or even restart) Godot." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:77 -msgid "Any C++ version can be used, and mixing compiler brands and versions for the generated shared libraries works perfectly, thanks to our use of an internal C API Bridge." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:81 -msgid "This language is the best choice for performance and does not need to be used throughout an entire game, as other parts can be written in GDScript or Visual Script. However, the API is clear and easy to use as it resembles, mostly, Godot's actual C++ API." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:86 -msgid "More languages can be made available through the GDNative interface, but keep in mind we don't have official support for them." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:90 -msgid "Scripting a scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:92 -msgid "For the rest of this tutorial we'll set up a GUI scene consisting of a button and a label, where pressing the button will update the label. This will demonstrate:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:96 -msgid "Writing a script and attaching it to a node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:97 -msgid "Hooking up UI elements via signals." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:98 -msgid "Writing a script that can access other nodes in the scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:100 -msgid "Before continuing, make sure to skim and bookmark the :ref:`GDScript` reference. It's a language designed to be simple, and the reference is structured into sections to make it easier to get an overview of the concepts." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:105 -msgid "Scene setup" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:107 -msgid "If you still have the \"instancing\" project open from the previous tutorial, then close that out (Project -> Quit to Project List) and create a New Project." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:109 -msgid "Use the \"Add Child Node\" dialogue accessed from the Scene tab (or by pressing :kbd:`Ctrl + A`) to create a hierarchy with the following nodes:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:112 -msgid "Panel" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:114 -msgid "Label" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:115 -msgid "Button" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:117 -msgid "The scene tree should look like this:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:121 -msgid "Use the 2D editor to position and resize the Button and Label so that they look like the image below. You can set the text from the Inspector tab." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:126 -msgid "Finally, save the scene with a name such as ``sayhello.tscn``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:131 -msgid "Adding a script" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:133 -msgid "Right click on the Panel node, then select \"Attach Script\" from the context menu:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:138 -msgid "The script creation dialog will pop up. This dialog allows you to set the script's language, class name, and other relevant options." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:141 -msgid "In GDScript, the file itself represents the class, so the class name field is not editable." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:144 -msgid "The node we're attaching the script to is a panel, so the Inherits field will automatically be filled in with \"Panel\". This is what we want, as the script's goal is to extend the functionality of our panel node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:148 -msgid "Finally, enter a path name for the script and select Create:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:152 -msgid "The script will then be created and added to the node. You can see this as an \"Open script\" icon next to the node in the Scene tab, as well as in the script property under Inspector:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:158 -msgid "To edit the script, select either of these buttons, both of which are highlighted in the above image. This will bring you to the script editor, where a default template will be included:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:163 -msgid "There's not much there. The ``_ready()`` function is called when the node, and all its children, enters the active scene. **Note:** ``_ready()`` is not the constructor; the constructor is instead ``_init()``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:168 -msgid "The role of the script" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:170 -msgid "A script adds behavior to a node. It is used to control how the node functions as well as how it interacts with other nodes: children, parent, siblings, and so on. The local scope of the script is the node. In other words, the script inherits the functions provided by that node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:181 -msgid "Handling a signal" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:183 -msgid "Signals are \"emitted\" when some specific kind of action happens, and they can be connected to any function of any script instance. Signals are used mostly in GUI nodes, although other nodes have them too, and you can even define custom signals in your own scripts." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:188 -msgid "In this step, we'll connect the \"pressed\" signal to a custom function. Forming connections is the first part and defining the custom function is the second part. For the first part, Godot provides two ways to create connections: through a visual interface the editor provides or through code." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:193 -msgid "While we will use the code method for the remainder of this tutorial series, let's cover how the editor interface works for future reference." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:196 -msgid "Select the Button node in the scene tree and then select the \"Node\" tab. Next, make sure that you have \"Signals\" selected." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:201 -msgid "If you then select \"pressed()\" under \"BaseButton\" and click the \"Connect...\" button in the bottom right, you'll open up the connection creation dialogue." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:206 -msgid "The top of the dialogue displays a list of your scene's nodes with the emitting node's name highlighted in blue. Select the \"Panel\" node here." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:209 -msgid "The bottom of the dialogue shows the name of the method that will be created. By default, the method name will contain the emitting node's name (\"Button\" in this case), resulting in ``_on_[EmitterNode]_[signal_name]``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:213 -msgid "And that concludes the guide on how to use the visual interface. However, this is a scripting tutorial, so for the sake of learning, let's dive into the manual process!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:217 -msgid "To accomplish this, we will introduce a function that is probably the most used by Godot programmers: :ref:`Node.get_node() `. This function uses paths to fetch nodes anywhere in the scene, relative to the node that owns the script." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:222 -msgid "For the sake of convenience, delete everything underneath ``extends Panel``. You will fill out the rest of the script manually." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:225 -msgid "Because the Button and Label are siblings under the Panel where the script is attached, you can fetch the Button by typing the following underneath the ``_ready()`` function:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:242 -msgid "Next, write a function which will be called when the button is pressed:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:257 -msgid "Finally, connect the button's \"pressed\" signal to ``_on_Button_pressed()`` by using :ref:`Object.connect() `." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:273 -msgid "The final script should look like this:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:306 -msgid "Run the scene and press the button. You should get the following result:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:310 -msgid "Why, hello there! Congratulations on scripting your first scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:314 -msgid "A common misunderstanding regarding this tutorial is how ``get_node(path)`` works. For a given node, ``get_node(path)`` searches its immediate children. In the above code, this means that Button must be a child of Panel. If Button were instead a child of Label, the code to obtain it would be:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:332 -msgid "Also, remember that nodes are referenced by name, not by type." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:336 -msgid "The 'advanced' panel of the connect dialogue is for binding specific values to the connected function's parameters. You can add and remove values of different types." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting.rst:340 -msgid "The code approach also enables this with a 4th ``Array`` parameter that is empty by default. Feel free to read up on the ``Object.connect`` method for more information." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/scripting_continued.pot b/sphinx/templates/getting_started/step_by_step/scripting_continued.pot deleted file mode 100644 index 7890e61f7b..0000000000 --- a/sphinx/templates/getting_started/step_by_step/scripting_continued.pot +++ /dev/null @@ -1,193 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:4 -msgid "Scripting (continued)" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:7 -msgid "Processing" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:9 -msgid "Several actions in Godot are triggered by callbacks or virtual functions, so there is no need to write code that runs all the time." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:12 -msgid "However, it is still common to need a script to be processed on every frame. There are two types of processing: idle processing and physics processing." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:16 -msgid "Idle processing is activated when the method :ref:`Node._process() ` is found in a script. It can be turned off and on with the :ref:`Node.set_process() ` function." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:20 -msgid "This method will be called every time a frame is drawn:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:36 -msgid "It's important to bear in mind that the frequency with which ``_process()`` will be called depends on how many frames per second (FPS) your application is running at. This rate can vary over time and devices." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:40 -msgid "To help manage this variability, the ``delta`` parameter contains the time elapsed in seconds as a floating-point number since the previous call to ``_process()``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:43 -msgid "This parameter can be used to make sure things always take the same amount of time, regardless of the game's FPS." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:46 -msgid "For example, movement is often multiplied with a time delta to make movement speed both constant and independent of the frame rate." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:49 -msgid "Physics processing with ``_physics_process()`` is similar, but it should be used for processes that must happen before each physics step, such as controlling a character. It always runs before a physics step and it is called at fixed time intervals: 60 times per second by default. You can change the interval from the Project Settings, under Physics -> Common -> Physics Fps." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:55 -msgid "The function ``_process()``, however, is not synced with physics. Its frame rate is not constant and is dependent on hardware and game optimization. Its execution is done after the physics step on single-threaded games." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:58 -msgid "A simple way to see the ``_process()`` function at work is to create a scene with a single Label node, with the following script:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:85 -msgid "Which will show a counter increasing each frame." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:88 -msgid "Groups" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:90 -msgid "Groups in Godot work like tags you might have come across in other software. A node can be added to as many groups as desired. This is a useful feature for organizing large scenes. There are two ways to add nodes to groups. The first is from the UI, using the Groups button under the Node panel:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:97 -msgid "And the second way is from code. The following script would add the current node to the ``enemies`` group as soon as it appeared in the scene tree." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:115 -msgid "This way, if the player is discovered sneaking into a secret base, all enemies can be notified about its alarm sounding by using :ref:`SceneTree.call_group() `:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:132 -msgid "The above code calls the function ``player_was_discovered`` on every member of the group ``enemies``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:135 -msgid "It is also possible to get the full list of ``enemies`` nodes by calling :ref:`SceneTree.get_nodes_in_group() `:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:148 -msgid "The :ref:`SceneTree ` class provides many useful methods, like interacting with scenes, their node hierarchy and groups of nodes. It allows you to easily switch scenes or reload them, to quit the game or pause and unpause it. It even comes with interesting signals. So check it out if you have some time!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:156 -msgid "Notifications" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:158 -msgid "Godot has a system of notifications. These are usually not needed for scripting, as it's too low-level and virtual functions are provided for most of them. It's just good to know they exist. For example, you may add an :ref:`Object._notification() ` function in your script:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:193 -msgid "The documentation of each class in the :ref:`Class Reference ` shows the notifications it can receive. However, in most cases GDScript provides simpler overridable functions." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:198 -msgid "Overridable functions" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:200 -msgid "Such overridable functions, which are described as follows, can be applied to nodes:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:272 -msgid "As mentioned before, it's better to use these functions instead of the notification system." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:276 -msgid "Creating nodes" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:278 -msgid "To create a node from code, call the ``.new()`` method, like for any other class-based datatype. For example:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:302 -msgid "To delete a node, be it inside or outside the scene, ``free()`` must be used:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:318 -msgid "When a node is freed, it also frees all its child nodes. Because of this, manually deleting nodes is much simpler than it appears. Free the base node and everything else in the subtree goes away with it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:322 -msgid "A situation might occur where we want to delete a node that is currently \"blocked\", because it is emitting a signal or calling a function. This will crash the game. Running Godot with the debugger will often catch this case and warn you about it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:327 -msgid "The safest way to delete a node is by using :ref:`Node.queue_free() `. This erases the node safely during idle." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:345 -msgid "Instancing scenes" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:347 -msgid "Instancing a scene from code is done in two steps. The first one is to load the scene from your hard drive:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:360 -msgid "Preloading it can be more convenient, as it happens at parse time (GDScript only):" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:368 -msgid "But ``scene`` is not yet a node. It's packed in a special resource called :ref:`PackedScene `. To create the actual node, the function :ref:`PackedScene.instance() ` must be called. This will return the tree of nodes that can be added to the active scene:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:386 -msgid "The advantage of this two-step process is that a packed scene may be kept loaded and ready to use so that you can create as many instances as desired. This is especially useful to quickly instance several enemies, bullets, and other entities in the active scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:394 -msgid "Register scripts as classes" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:396 -msgid "Godot has a \"Script Class\" feature to register individual scripts with the Editor. By default, you can only access unnamed scripts by loading the file directly." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:400 -msgid "You can name a script and register it as a type in the editor with the ``class_name`` keyword followed by the class's name. You may add a comma and an optional path to a PNG or SVG image to use as an icon (16×16 minimum, 32×32 recommended). You will then find your new type in the Node or Resource creation dialog. Note that the icon will only appear after restarting the editor." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:423 -msgid "In Godot 3.1:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:425 -msgid "Only GDScript and NativeScript, i.e., C++ and other GDNative-powered languages, can register scripts." -msgstr "" - -#: ../../docs/getting_started/step_by_step/scripting_continued.rst:426 -msgid "Only GDScript creates global variables for each named script." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/scripting_first_script.pot b/sphinx/templates/getting_started/step_by_step/scripting_first_script.pot new file mode 100644 index 0000000000..fac0a7f5d1 --- /dev/null +++ b/sphinx/templates/getting_started/step_by_step/scripting_first_script.pot @@ -0,0 +1,213 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:19 +msgid "Creating your first script" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:21 +msgid "In this lesson, you will code your first script to make the Godot icon turn in circles using GDScript. As we mentioned :ref:`in the introduction `, we assume you have programming foundations." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:27 +msgid "To learn more about GDScript, its keywords, and its syntax, head to the :ref:`GDScript reference`." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:31 +msgid "Project setup" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:33 +msgid "Please create a new project to start with a clean slate. Your project should contain one picture: the Godot icon, which we often use for prototyping in the community." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:39 +msgid "We need to create a Sprite2D node to display it in the game. In the Scene dock, click the Other Node button." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:44 +msgid "Type \"Sprite2D\" in the search bar to filter nodes and double-click on Sprite2D to create the node." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:49 +msgid "Your Scene tab should now only have a Sprite2D node." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:53 +msgid "A Sprite2D node needs a texture to display. In the Inspector on the right, you can see that the Texture property says \"[empty]\". To display the Godot icon, click and drag the file ``icon.png`` from the FileSystem dock onto the Texture slot." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:61 +msgid "You can create Sprite2D nodes automatically by dragging and dropping images on the viewport." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:66 +msgid "Then, click and drag the icon in the viewport to center it in the game view." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:71 +msgid "Creating a new script" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:73 +msgid "To create and attach a new script to our node, right-click on Sprite2D in the scene dock and select \"Attach Script\"." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:78 +msgid "The Attach node Script window appears. It allows you to select the script's language and file path, among other options." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:81 +msgid "Change the Template from Default to Empty to start with a clean file. Leave the other options by default and click the Create button to create the script." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:86 +msgid "The Script workspace should appear with your new file open and the following line of code:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:94 +msgid "Every GDScript file is implicitly a class. The ``extends`` keyword defines the class this script inherits or extends. In this case, it's ``Sprite2D``, meaning our script will get access to all the properties and functions of the Sprite2D node, including classes it extends, like ``Node2D``, ``CanvasItem``, and ``Node``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:100 +msgid "In GDScript, if you omit the line with the ``extends`` keyword, your class will implicitly extend :ref:`Reference `, which Godot uses to manage your application's memory." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:104 +msgid "Inherited properties include the ones you can see in the Inspector dock, like our node's ``texture``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:109 +msgid "By default, the Inspector displays a node's properties in \"Title Case\", with capitalized words separated by a space. In GDScript code, these properties are in \"snake_case\", lowercase, and words separated by an underscore." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:113 +msgid "You can hover any property's name in the Inspector to see a description and its identifier in code." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:117 +msgid "Hello, world!" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:119 +msgid "Our script currently doesn't do anything. Let's make it print the text \"Hello, world!\" to the Output bottom panel to get started." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:122 +msgid "Add the following code to your script:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:130 +msgid "Let's break it down. The ``func`` keyword defines a new function named ``_init``. This is a special name for our class's constructor. The engine calls ``_init()`` on every object or node upon creating it in memory, if you define this function." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:135 +msgid "GDScript is an indent-based language. The tab at the start of the line that says ``print()`` is necessary for the code to work. If you omit it or don't indent a line correctly, the editor will highlight it in red and display the following error message: \"Unexpected indentation.\"" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:140 +msgid "Save the scene if you haven't already, then press :kbd:`F6` to run it. Look at the Output bottom panel that expands. It should display \"Hello, world!\"" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:145 +msgid "Delete the ``_init()`` function, so you're only left with the line ``extends Sprite2D``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:149 +msgid "Turning around" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:151 +msgid "It's time to make our node move and rotate. To do so, we're going to add two member variables to our script: the movement speed in pixels per second and the angular speed in radians per second." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:163 +msgid "Member variables sit at the top of the script, before functions. Every node instance with this script attached to it will have its own copy of the ``speed`` and ``angular_speed`` properties." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:167 +msgid "As in some other engines, angles in Godot work in radians by default, but you have built-in functions and properties available if you prefer to calculate angles in degrees instead." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:171 +msgid "To move our icon, we need to update its position and rotation every frame in the game loop. We can use the ``_process()`` virtual function of the ``Node`` class. If you define it in any class that extends the Node class, like Sprite2D, Godot will call the function every frame and pass it an argument named ``delta``, the time elapsed since the last frame." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:179 +msgid "Games work by rendering many images per second, each called a frame, and they do so in a loop. We measure the rate at which a game produces images in Frames Per Second (FPS). Most games aim for 60 FPS, although you might find figures like 30 FPS on slower mobile devices or 90 to 240 for virtual reality games." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:185 +msgid "The engine and game developers do their best to update the game world and render images at a constant time interval, but there are always small variations in frame render times. That's why the engine provides us with this delta time value, making our motion independent of our framerate." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:190 +msgid "At the bottom of the script, define the function:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:198 +msgid "The ``func`` keyword defines a new function. After it, we have to write the function's name and arguments it takes in parentheses. A colon ends the definition, and the indented blocks that follow are the function's content or instructions." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:203 +msgid "Notice how ``_process()``, like ``_init()``, starts with a leading underscore. By convention, Godot's virtual functions, that is to say, built-in functions you can override to communicate with the engine, start with an underscore." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:208 +msgid "The line inside the function, ``rotation += angular_speed * delta``, increments our sprite's rotation every frame. Here, ``rotation`` is a property inherited from the class ``Node2D``, which ``Sprite2D`` extends. It controls the rotation of our node and works with radians." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:213 +msgid "In the code editor, you can ctrl-click on any built-in property or function like ``position``, ``rotation``, or ``_process`` to open the corresponding documentation in a new tab." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:217 +msgid "Run the scene to see the Godot icon turn in-place." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:222 +msgid "Moving forward" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:224 +msgid "Let's now make the node move. Add the following two lines to the ``_process()`` function, ensuring the new lines are indented the same way as the one before them." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:234 +msgid "As we already saw, the ``var`` keyword defines a new variable. If you put it at the top of the script, it defines a property of the class. Inside a function, it defines a local variable: it only exists within the function's scope." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:238 +msgid "We define a local variable named ``velocity``, a 2D vector representing both a direction and a speed. To make the node move forward, we start from the Vector2 class's constant Vector2.UP, a vector pointing up, and rotate it by calling the ``Vector2.rotated()`` method. This expression, ``Vector2.UP.rotated(rotation)``, is a vector pointing forward relative to our icon. Multiplied by our ``speed`` property, it gives us a velocity we can use to move the node forward." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:245 +msgid "We add ``velocity * delta`` to the node's ``position`` to move it. The position itself is of type :ref:`Vector2 `, a built-in type in Godot representing a 2D vector." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:249 +msgid "Run the scene to see the Godot head run in circles." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:253 +msgid "Moving a node like that does not take into account colliding with walls or the floor. In :ref:`doc_your_first_2d_game`, you will learn another approach to moving objects while detecting collisions." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_first_script.rst:257 +msgid "Our node currently moves by itself. In the next part, we'll use player input to control it." +msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/scripting_languages.pot b/sphinx/templates/getting_started/step_by_step/scripting_languages.pot new file mode 100644 index 0000000000..60fb55ea36 --- /dev/null +++ b/sphinx/templates/getting_started/step_by_step/scripting_languages.pot @@ -0,0 +1,197 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:7 +msgid "Scripting languages" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:9 +msgid "This lesson will give you an overview of the available scripting languages in Godot. You will learn the pros and cons of each option. In the next part, you will write your first script using GDScript." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:13 +msgid "**Scripts attach to a node and extend its behavior**. This means that scripts inherit all functions and properties of the node they attach to." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:16 +msgid "For example, take a game where a Camera2D node follows a ship. The Camera2D node follows its parent by default. Imagine you want it to shake when the player takes damage. As this feature is not built-into Godot, you would attach a script to it and code the camera shake." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:24 +msgid "Available scripting languages" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:26 +msgid "Godot offers **five gameplay programming languages**: GDScript, C#, VisualScript, and C++ and C via its GDNative technology. There are more :ref:`community-supported languages `, but these are the official ones." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:31 +msgid "You can use multiple languages in a single project. For instance, in a team, you could code gameplay logic in GDScript as it's fast to write, let level designers script quests in the graphical language VisualScript, and use C# or C++ to implement complex algorithms and maximize their performance. Or you can write everything in GDScript or C#. It's your call." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:37 +msgid "We provide this flexibility to answer the needs of different game projects and developers." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:41 +msgid "Which language should I use?" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:43 +msgid "If you're a beginner, we recommend to **start with GDScript**. We made this language specifically for Godot and the needs of game developers. It has a lightweight and straightforward syntax and provides the tightest integration with Godot." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:50 +msgid "For C#, you will need an external code editor like `VSCode `_ or Visual Studio. While C# support is now mature, you will also find fewer learning resources for it compared to GDScript. That's why we recommend C# mainly to users who already have experience with the language." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:56 +msgid "Let's look at each language's features, as well as its pros and cons." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:59 +msgid "GDScript" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:61 +msgid ":ref:`GDScript` is an `object-oriented `_ and `imperative `_ programming language built for Godot. It's made by and for game developers to save you time coding games. Its features include:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:67 +msgid "A simple syntax that leads to short files." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:68 +msgid "Blazing fast compilation and loading times." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:69 +msgid "Tight editor integration, with code completion for nodes, signals, and more information from the scene it's attached to." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:71 +msgid "Built-in vector and transform types, making it efficient for heavy use of linear algebra, a must for games." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:73 +msgid "Supports multiple threads as efficiently as statically typed languages. This is one of the features we couldn't provide easily with a third-party language like Lua or Python." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:76 +msgid "No `garbage collection `_, as this feature eventually gets in the way when creating games. The engine counts references and manages the memory for you in most cases by default, but you can also control memory if you need to." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:81 +msgid "`Gradual typing `_. Variables have dynamic types by default, but you also can use type hints for strong type checks." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:85 +msgid "GDScript looks like Python as you structure your code blocks using indentations, but it doesn't work the same way in practice. It's inspired by multiple languages, including Squirrel, Lua, and Python." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:91 +msgid "Why don't we use Python or Lua directly?" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:93 +msgid "Years ago, Godot used Python, then Lua. Both languages' integration took a lot of work and had severe limitations. For example, threading support was a big challenge with Python." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:97 +msgid "Developing a dedicated language doesn't take us more work and we can tailor it to game developers' needs. We're now working on performance optimizations and features that would've been difficult to offer with third-party languages." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:103 +msgid ".NET / C#" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:105 +msgid "As Microsoft's `C# `_ is a favorite amongst game developers, we officially support it. C# is a mature and flexible language with tons of libraries written for it. We could add support for it thanks to a generous donation from Microsoft." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:113 +msgid "C# offers a good tradeoff between performance and ease of use, although you should be aware of its garbage collector." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:116 +msgid "You must use the Mono edition of the Godot editor to script in C#. You can download it on the Godot website's `download `_ page." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:120 +msgid "Since Godot uses the `Mono `_ .NET runtime, in theory, you can use any third-party .NET library or framework in Godot, as well as any Common Language Infrastructure-compliant programming language, such as F#, Boo, or ClojureCLR. However, C# is the only officially supported .NET option." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:125 +msgid "GDScript code itself doesn't execute as fast as compiled C# or C++. However, most script code calls functions written with fast algorithms in C++ code inside the engine. In many cases, writing gameplay logic in GDScript, C#, or C++ won't have a significant impact on performance." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:132 +msgid "VisualScript" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:134 +msgid ":ref:`Visual Scripting` is a graph-based visual programming language where you connect blocks. It can be a great tool for non-programmers like game designers and artists." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:140 +msgid "You can use other languages to create custom blocks that are specific to your game. For example, to script AIs, quests, or dialogues. That's where the strength of VisualScript lies." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:144 +msgid "While it provides all the basic building blocks you need to code complete games, we do not recommend to use VisualScript this way. Programming everything with it is slow compared to using other programming languages." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:150 +msgid "For more information, see :ref:`Getting started with VisualScript `." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:154 +msgid "C and C++ via GDNative" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:156 +msgid "GDNative allows you to write game code in C or C++ without needing to recompile or even restart Godot." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:161 +msgid "You can use any version of the language or mix compiler brands and versions for the generated shared libraries, thanks to our use of an internal C API Bridge." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:164 +msgid "This language is the best choice for performance. You don't need to use it throughout an entire game, as you can write other parts in GDScript, C#, or VisualScript." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:168 +msgid "When working with GDNative, the available types, functions, and properties closely resemble Godot's actual C++ API." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:172 +msgid "Summary" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:174 +msgid "Scripts are files containing code that you attach to a node to extend its functionality." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:177 +msgid "Godot supports five official scripting languages, offering you flexibility between performance and ease of use." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_languages.rst:180 +msgid "You can mix languages, for instance, to implement demanding algorithms with C or C++ and write most of the game logic with GDScript or C#." +msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/scripting_player_input.pot b/sphinx/templates/getting_started/step_by_step/scripting_player_input.pot new file mode 100644 index 0000000000..1af9e95c10 --- /dev/null +++ b/sphinx/templates/getting_started/step_by_step/scripting_player_input.pot @@ -0,0 +1,121 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:8 +msgid "Listening to player input" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:10 +msgid "Building upon the previous lesson, let's look at another important feature of any game: giving control to the player. To add this, we need to modify our code." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:15 +msgid "You have two main tools to process the player's input in Godot:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:17 +msgid "The built-in input callbacks, mainly ``_unhandled_input()``. Like ``_process()``, it's a built-in virtual function that Godot calls every time the player presses a key. It's the tool you want to use to react to events that don't happen every frame, like pressing :kbd:`Space` to jump. To learn more about input callbacks, see :ref:`doc_inputevent`." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:22 +msgid "The ``Input`` singleton. A singleton is a globally accessible object. Godot provides access to several in scripts. It's the right tool to check for input every frame." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:26 +msgid "We're going to use the ``Input`` singleton here as we need to know if the player wants to turn or move every frame." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:29 +msgid "For turning, we should use a new variable: ``direction``. Update the top of the ``_process()`` function like so, up to the line where we increment the sprite's ``rotation``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:45 +msgid "Our ``direction`` local variable is a multiplier representing the direction in which the player wants to turn. A value of ``0`` means the player isn't pressing the left or the right arrow key. A value of ``1`` means the player wants to turn right, and ``-1`` means they want to turn left." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:50 +msgid "To produce these values, we introduce conditions and the use of ``Input``. A condition starts with the ``if`` keyword in GDScript and ends with a colon. The condition is the expression between the keyword and the end of the line." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:54 +msgid "To check if a key was pressed this frame, we call ``Input.is_action_pressed()``. The method takes a text string representing an input action and returns ``true`` if the action is pressed, ``false`` otherwise." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:58 +msgid "The two actions we use above, \"ui_left\" and \"ui_right\", are predefined in every Godot project. They respectively trigger when the player presses the left and right arrows on the keyboard or left and right on a gamepad's D-pad." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:62 +msgid "You can see and edit input actions in your project by going to Project -> Project Settings and clicking on the Input Map tab." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:65 +msgid "Finally, we use the ``direction`` as a multiplier when we update the node's ``rotation``: ``rotation += angular_speed * direction * delta``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:68 +msgid "If you run the scene with this code, the icon should rotate when you press :kbd:`Left` and :kbd:`Right`." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:72 +msgid "Moving when pressing \"up\"" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:74 +msgid "To only move when pressing a key, we need to modify the code that calculates the velocity. Replace the line starting with ``var velocity`` with the code below." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:86 +msgid "We initialize the ``velocity`` with a value of ``Vector2.ZERO``, another constant of the built-in ``Vector`` type representing a 2D vector of length 0." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:89 +msgid "If the player presses the \"ui_up\" action, we then update the velocity's value, causing the sprite to move forward." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:92 +msgid "Here is the complete ``Sprite2D.gd`` file for reference." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:118 +msgid "If you run the scene, you should now be able to rotate with the left and right arrow keys and move forward by pressing :kbd:`Up`." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:124 +msgid "Summary" +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:126 +msgid "In summary, every script in Godot represents a class and extends one of the engine's built-in classes. The node types your classes inherit from give you access to properties like ``rotation`` and ``position`` in our sprite's case. You also inherit many functions, which we didn't get to use in this example." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:131 +msgid "In GDScript, the variables you put at the top of the file are your class's properties, also called member variables. Besides variables, you can define functions, which, for the most part, will be your classes' methods." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:135 +msgid "Godot provides several virtual functions you can define to connect your class with the engine. These include ``_process()``, to apply changes to the node every frame, and ``_unhandled_input()``, to receive input events like key and button presses from the users. There are quite a few more." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:140 +msgid "The ``Input`` singleton allows you to react to the players' input anywhere in your code. In particular, you'll get to use it in the ``_process()`` loop." +msgstr "" + +#: ../../docs/getting_started/step_by_step/scripting_player_input.rst:143 +msgid "In the next lesson, we'll build upon" +msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/signals.pot b/sphinx/templates/getting_started/step_by_step/signals.pot index 749bb7f3ed..67369aa4fb 100644 --- a/sphinx/templates/getting_started/step_by_step/signals.pot +++ b/sphinx/templates/getting_started/step_by_step/signals.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,142 +16,254 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/step_by_step/signals.rst:1 +#: ../../docs/getting_started/step_by_step/signals.rst:6 msgid "Signal" msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:7 -msgid "Signals" -msgstr "" - -#: ../../docs/getting_started/step_by_step/signals.rst:10 -msgid "Introduction" -msgstr "" - #: ../../docs/getting_started/step_by_step/signals.rst:12 -msgid "Signals are Godot's version of the *observer* pattern. They allow a node to send out a message that other nodes can listen for and respond to. For example, rather than continuously checking a button to see if it's being pressed, the button can emit a signal when it's pressed." +msgid "Using Signals" msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:17 -msgid "You can read more about the observer pattern here: https://gameprogrammingpatterns.com/observer.html" +#: ../../docs/getting_started/step_by_step/signals.rst:14 +msgid "In this lesson, we will look at signals. They are messages that nodes emit when something specific happens to them, like a button being pressed. Other nodes can connect to that signal and call a function when the event occurs." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:19 -msgid "Signals are a way to *decouple* your game objects, which leads to better organized and more manageable code. Instead of forcing game objects to expect other objects to always be present, they can instead emit signals that all interested objects can subscribe to and respond to." +#: ../../docs/getting_started/step_by_step/signals.rst:18 +msgid "It is a delegation mechanism built into Godot that allows one game object to react to a change in another without them referencing one another. Using signals limits `coupling `_ and keeps your code flexible." msgstr "" #: ../../docs/getting_started/step_by_step/signals.rst:24 -msgid "Below you can see some examples of how you can use signals in your own projects." +msgid "For example, you might have a life bar on the screen that represents the player’s health. When the player takes damage or uses a healing potion, you want the bar to reflect the change. To do so, in Godot, you would use signals." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:27 -msgid "Timer example" +#: ../../docs/getting_started/step_by_step/signals.rst:28 +msgid "As mentioned in the introduction, signals are Godot's version of the observer pattern. You can learn more about it here: https://gameprogrammingpatterns.com/observer.html" msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:29 -msgid "To see how signals work, let's try using a :ref:`Timer ` node. Create a new scene with a Node2D and two children: a Timer and a :ref:`Sprite `. In the Scene dock, rename Node2D to TimerExample." +#: ../../docs/getting_started/step_by_step/signals.rst:32 +msgid "We will now use a signal to make our Godot icon from last part move and stop by pressing a button." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:33 -msgid "For the Sprite's texture, you can use the Godot icon, or any other image you like. Do so by selecting ``Load`` in the Sprite's Texture attribute drop-down menu. Attach a script to the root node, but don't add any code to it yet." +#: ../../docs/getting_started/step_by_step/signals.rst:38 +msgid "Scene setup" msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:37 -msgid "Your scene tree should look like this:" +#: ../../docs/getting_started/step_by_step/signals.rst:40 +msgid "Create a new scene by going to the menu Scene -> New Scene." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:41 -msgid "In the Timer node's properties, check the \"On\" box next to *Autostart*. This will cause the timer to start automatically when you run the scene. You can leave the *Wait Time* at 1 second." +#: ../../docs/getting_started/step_by_step/signals.rst:44 +msgid "In the Scene dock, click the 2D Scene button. This will add a Node2D as our root." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:45 -msgid "Next to the \"Inspector\" tab is a tab labeled \"Node\". Click on this tab and you'll see all of the signals that the selected node can emit. In the case of the Timer node, the one we're concerned with is \"timeout\". This signal is emitted whenever the Timer reaches ``0``." +#: ../../docs/getting_started/step_by_step/signals.rst:50 +msgid "In the FileSystem dock, click and drag the ``Sprite2D.tscn`` file you saved previously onto the Node2D to instantiate it." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:52 -msgid "Click on the \"timeout()\" signal and click \"Connect...\" at the bottom of the signals panel. You'll see the following window, where you can define how you want to connect the signal:" +#: ../../docs/getting_started/step_by_step/signals.rst:55 +msgid "We want to add another node as a sibling of the Sprite2D. To do so, right-click on Node2D and select Add Child Node." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:58 -msgid "On the left side, you'll see the nodes in your scene and can select the node that you want to \"listen\" for the signal. Note that the Timer node is blue, this is a visual indication that it's the node that is emitting the signal. Select the root node." +#: ../../docs/getting_started/step_by_step/signals.rst:60 +msgid "Search for the Button node type and add it." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:63 -msgid "The target node *must* have a script attached or you'll receive an error message." +#: ../../docs/getting_started/step_by_step/signals.rst:64 +msgid "The node is small by default. Click and drag on the bottom-right handle of the Button in the viewport to resize it." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:66 -msgid "If you toggle the Advanced menu, you'll see on the right side that you can bind an arbitrary number of arguments of (possibly) different types. This can be useful when you have more than one signal connected to the same method, as each signal propagation will result in different values for those extra call arguments." +#: ../../docs/getting_started/step_by_step/signals.rst:69 +msgid "If you don't see the handles, ensure the select tool is active in the toolbar." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:70 -msgid "On the bottom of the window is a field labeled \"Receiver Method\". This is the name of the function in the target node's script that you want to use. By default, Godot will create this function using the naming convention ``_on__`` but you can change it if you wish." +#: ../../docs/getting_started/step_by_step/signals.rst:73 +msgid "Click and drag on the button itself to move it closer to the sprite." msgstr "" #: ../../docs/getting_started/step_by_step/signals.rst:75 -msgid "Click \"Connect\" and you'll see that the function has been created in the script:" +msgid "You can also write a label on the Button by editing its Text property in the Inspector." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:80 +msgid "Your scene tree and viewport should look like this." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:85 +msgid "Connecting a signal in the editor" +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:87 +msgid "Here, we want to connect the Button's \"pressed\" signal to our Sprite2D, and we want to call a new function that will toggle its motion on and off. We need to have a script attached to the Sprite2D node, which we do from the previous lesson." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:91 +msgid "You can connect signals in the Node dock. Select the Button node and, on the right side of the editor, click on the tab named \"Node\" next to the Inspector." msgstr "" #: ../../docs/getting_started/step_by_step/signals.rst:96 -msgid "Now we can replace the placeholder code with whatever code we want to run when the signal is received. Let's make the Sprite blink:" +msgid "The dock displays a list of signals available on the selected node." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:121 -msgid "Run the scene and you'll see the Sprite blinking on and off every second. You can change the Timer's *Wait Time* property to alter this." +#: ../../docs/getting_started/step_by_step/signals.rst:100 +msgid "Double-click the \"pressed\" signal to open the node connection window." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:125 -msgid "Connecting signals in code" +#: ../../docs/getting_started/step_by_step/signals.rst:104 +msgid "There, you can connect the signal to the Sprite2D node. The node needs a receiver method, a function that Godot will call when the Button emits the signal. The editor generates one for you. By convention, we name these callback methods \"_on_NodeName_signal_name\". Here, it'll be \"_on_Button_pressed\"." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:127 -msgid "You can also make the signal connection in code rather than with the editor. This is usually necessary when you're instancing nodes via code and so you can't use the editor to make the connection." +#: ../../docs/getting_started/step_by_step/signals.rst:111 +msgid "When connecting signals via the editor's Node dock, you can use two modes. The simple one only allows you to connect to nodes that have a script attached to them and creates a new callback function on them." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:131 -msgid "First, disconnect the signal by selecting the connection in the Timer's \"Node\" tab and clicking disconnect." +#: ../../docs/getting_started/step_by_step/signals.rst:117 +msgid "The advanced view lets you connect to any node and any built-in function, add arguments to the callback, and set options. You can toggle the mode in the window's bottom-right by clicking the radio button." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:122 +msgid "Click the connect button to complete the signal connection and jump to the Script workspace. You should see the new method with a connection icon in the left margin." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:128 +msgid "If you click the icon, a window pops up and displays information about the connection. This feature is only available when connecting nodes in the editor." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:133 +msgid "Let's replace the line with the ``pass`` keyword with code that'll toggle the node's motion." msgstr "" #: ../../docs/getting_started/step_by_step/signals.rst:136 -msgid "To make the connection in code, we can use the ``connect`` function. We'll put it in ``_ready()`` so that the connection will be made on run. The syntax of the function is ``.connect(, , )``. Here is the code for our Timer connection:" +msgid "Our Sprite2D moves thanks to code in the ``_process()`` function. Godot provides a method to toggle processing on and off: :ref:`Node.set_process() `. Another method of the Node class, ``is_processing()``, returns ``true`` if idle processing is active. We can use the ``not`` keyword to invert the value." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:171 -msgid "Custom signals" +#: ../../docs/getting_started/step_by_step/signals.rst:148 +msgid "This function will toggle processing and, in turn, the icon's motion on and off upon pressing the button." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:173 -msgid "You can also declare your own custom signals in Godot:" +#: ../../docs/getting_started/step_by_step/signals.rst:151 +msgid "Before trying the game, we need to simplify our ``_process()`` function to move the node automatically and not wait for user input. Replace it with the following code, which we saw two lessons ago:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:163 +msgid "Your complete ``Sprite2D.gd`` code should look like the following." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:181 +msgid "Run the scene now and click the button to see the sprite start and stop." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:184 +msgid "Connecting a signal via code" +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:186 +msgid "You can connect signals via code instead of using the editor. This is necessary when you create nodes or instantiate scenes inside of a script." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:189 +msgid "Let's use a different node here. Godot has a :ref:`Timer ` node that's useful to implement skill cooldown times, weapon reloading, and more." msgstr "" #: ../../docs/getting_started/step_by_step/signals.rst:192 -msgid "Once declared, your custom signals will appear in the Inspector and can be connected in the same way as a node's built-in signals." +msgid "Head back to the 2D workspace. You can either click the \"2D\" text at the top of the window or press :kbd:`Ctrl + F2` (:kbd:`Alt + 2` on macOS)." msgstr "" #: ../../docs/getting_started/step_by_step/signals.rst:195 -msgid "To emit a signal via code, use the ``emit_signal`` function:" +msgid "In the Scene dock, right-click on the Sprite2D node and add a new node. Search for Timer and add the corresponding node. Your scene should now look like this." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:222 -msgid "A signal can also optionally declare one or more arguments. Specify the argument names between parentheses:" +#: ../../docs/getting_started/step_by_step/signals.rst:200 +msgid "With the Timer node selected, go to the Inspector and check the **Autostart** property." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:243 -msgid "The signal arguments show up in the editor's node dock, and Godot can use them to generate callback functions for you. However, you can still emit any number of arguments when you emit signals. So it's up to you to emit the correct values." +#: ../../docs/getting_started/step_by_step/signals.rst:204 +msgid "Click the script icon next to Sprite2D to jump back to the scripting workspace." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:248 -msgid "To pass values, add them as the second argument to the ``emit_signal`` function:" +#: ../../docs/getting_started/step_by_step/signals.rst:208 +msgid "We need to do two operations to connect the nodes via code:" msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:276 -msgid "Conclusion" +#: ../../docs/getting_started/step_by_step/signals.rst:210 +msgid "Get a reference to the Timer from the Sprite2D." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:211 +msgid "Call the Timer's ``connect()`` method." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:213 +msgid "To connect to a signal via code, you need to call the ``connect()`` method of the node you want to listen to. In this case, we want to listen to the Timer's \"timeout\" signal." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:217 +msgid "To get a reference to a node relative to the current one, we use the method :ref:`Node.get_node() `. We can store the reference in a variable." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:231 +msgid "The function ``get_node()`` looks at the Sprite2D's children and gets nodes by their name. For example, if you renamed the Timer node to \"BlinkingTimer\" in the editor, you would have to change the call to ``get_node(\"BlinkingTimer\")``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:237 +msgid "We can now connect the Timer to the Sprite2D in the ``_ready()`` function." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:246 +msgid "The line reads like so: we connect the Timer's \"timeout\" signal to the node to which the script is attached (``self``). When the Timer emits \"timeout\", we want to call the function \"_on_Timer_timeout\", that we need to define. Let's add it at the bottom of our script and use it to toggle our sprite's visibility." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:257 +msgid "The ``visible`` property is a boolean that controls the visibility of our node. The line ``visible = not visible`` toggles the value. If ``visible`` is ``true``, it becomes ``false``, and vice-versa." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:262 +msgid "Custom signals" +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:264 +msgid "You can define custom signals in a script. Say, for example, that you want to show a game over screen when the player's health reaches zero. To do so, you could define a signal named \"died\" or \"health_depleted\" when their health reaches 0." msgstr "" #: ../../docs/getting_started/step_by_step/signals.rst:278 -msgid "Many of Godot's built-in node types provide signals you can use to detect events. For example, an :ref:`Area2D ` representing a coin emits a ``body_entered`` signal whenever the player's physics body enters its collision shape, allowing you to know when the player collected it." +msgid "As signals represent events that just occurred, we generally use an action verb in the past tense in their names." msgstr "" -#: ../../docs/getting_started/step_by_step/signals.rst:283 -msgid "In the next section, :ref:`doc_your_first_game`, you'll build a complete game including several uses of signals to connect different game components." +#: ../../docs/getting_started/step_by_step/signals.rst:281 +msgid "Your signals work the same way as built-in ones: they appear in the Node tab and you can connect to them like any other." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:286 +msgid "To emit a signal in your scripts, call ``emit_signal()``." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:296 +msgid "A signal can optionally declare one or more arguments. Specify the argument names between parentheses:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:308 +msgid "The signal arguments show up in the editor's node dock, and Godot can use them to generate callback functions for you. However, you can still emit any number of arguments when you emit signals. So it's up to you to emit the correct values." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:313 +msgid "To emit values along with the signal, add them as extra arguments to the ``emit_signal()`` function:" +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:325 +msgid "Summary" +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:327 +msgid "Any node in Godot emits signals when something specific happens to them, like a button being pressed. Other nodes can connect to individual signals and react to selected events." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:331 +msgid "Signals have many uses. With them, you can react to a node entering or exiting the game world, to a collision, to a character entering or leaving an area, to an element of the interface changing size, and much more." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:335 +msgid "For example, an :ref:`Area2D ` representing a coin emits a ``body_entered`` signal whenever the player's physics body enters its collision shape, allowing you to know when the player collected it." +msgstr "" + +#: ../../docs/getting_started/step_by_step/signals.rst:339 +msgid "In the next section, :ref:`doc_your_first_2d_game`, you'll create a complete 2D game and put everything you learned so far into practice." msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/splash_screen.pot b/sphinx/templates/getting_started/step_by_step/splash_screen.pot deleted file mode 100644 index 4c847724c3..0000000000 --- a/sphinx/templates/getting_started/step_by_step/splash_screen.pot +++ /dev/null @@ -1,65 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:4 -msgid "Splash screen" -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:7 -msgid "Tutorial" -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:9 -msgid "This is a simple tutorial to establish the basic idea of how the GUI subsystem works. The goal is to create a simple, static splash screen." -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:15 -msgid "Following is a file with the assets that will be used. The extracted files can be placed directly in your project folder and Godot will import them automatically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:18 -msgid ":download:`robisplash_assets.zip `." -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:21 -msgid "Setting up" -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:23 -msgid "Set the display resolution to 800x450 in Project Settings, and set up a new scene like this:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:27 -msgid "The nodes \"background\" and \"logo\" are of :ref:`TextureRect ` type. To display an image, drag the corresponding asset to the texture property." -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:32 -msgid "The node \"start\" is a :ref:`TextureButton `. It takes several images for different states, but only the normal and pressed will be supplied in this example:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:38 -msgid "Finally, the node \"copyright\" is a :ref:`Label `." -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:40 -msgid "Your final scene should look something like this." -msgstr "" - -#: ../../docs/getting_started/step_by_step/splash_screen.rst:44 -msgid "Go ahead and run the project. If you're satisfied with the results, continue to the next tutorial." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/ui_code_a_life_bar.pot b/sphinx/templates/getting_started/step_by_step/ui_code_a_life_bar.pot deleted file mode 100644 index a7358aa7d2..0000000000 --- a/sphinx/templates/getting_started/step_by_step/ui_code_a_life_bar.pot +++ /dev/null @@ -1,497 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:4 -msgid "Control the game's UI with code" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:7 -msgid "Intro" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:9 -msgid "In this tutorial, you will connect a character to a life bar and animate the health loss." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:14 -msgid "Here's what you'll create: the bar and the counter animate when the character takes a hit. They fade when it dies." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:18 -msgid "You will learn:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:20 -msgid "How to **connect** a character to a GUI with signals" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:21 -msgid "How to **control** a GUI with GDscript" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:22 -msgid "How to **animate** a life bar with the :ref:`Tween ` node" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:25 -msgid "If you want to learn how to set up the interface instead, check out the step-by-step UI tutorials:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:28 -msgid ":doc:`ui_main_menu`" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:29 -msgid ":doc:`ui_game_user_interface`" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:32 -msgid "When you code a game, you want to build the core gameplay first: the main mechanics, player input, win and loss conditions. The UI comes a bit later. You want to keep all the elements that make up your project separate if possible. Each character should be in its own scene, with its own scripts, and so should the UI elements. This prevents bugs, keeps your project manageable, and allows different team members to work on different parts of the game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:40 -msgid "Once the core gameplay and the UI are ready, you'll need to connect them somehow. In our example, we have the Enemy who attacks the Player at constant time intervals. We want the life bar to update when the Player takes damage." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:45 -msgid "To do this, we will use **signals**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:49 -msgid "Signals are Godot's version of the Observer pattern. They allow us to send out some message. Other nodes can connect to the object that **emits** the signal and receive the information. It's a powerful tool we use a lot for User Interface and achievement systems. You don't want to use them everywhere, though. Connecting two nodes adds some coupling between them. When there's a lot of connections, they become hard to manage. For more information, check out the `signals video tutorial `_ on GDquest." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:53 -msgid "Download and explore the start project" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:55 -msgid "Download the Godot project: :download:`ui_code_life_bar.zip `. It contains all the assets and scripts you need to get started. Extract the .zip archive to get two folders: `start` and `end`." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:58 -msgid "Load the ``start`` project in Godot. In the ``FileSystem`` dock, double click on LevelMockup.tscn to open it. It's an RPG game's mockup where 2 characters face each other. The pink enemy attacks and damages the green square at regular time intervals, until its death. Feel free to try out the game: the basic combat mechanics already work. But as the character isn't connected to the life bar, the ``GUI`` doesn't do anything." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:68 -msgid "This is typical of how you'd code a game: you implement the core gameplay first, handle the player's death, and only then you'll add the interface. That's because the UI listens to what's happening in the game. So it can't work if other systems aren't in place yet. If you design the UI before you prototype and test the gameplay, chances are it won't work well and you'll have to re-create it from scratch." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:71 -msgid "The scene contains a background sprite, a GUI, and two characters." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:75 -msgid "The scene tree, with the GUI scene set to display its children" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:77 -msgid "The GUI scene encapsulates all of the game's Graphical User Interface. It comes with a barebones script where we get the path to nodes that exist inside the scene:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:105 -msgid "``number_label`` displays a life count as a number. It's a ``Label`` node" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:107 -msgid "``bar`` is the life bar itself. It's a ``TextureProgress`` node" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:108 -msgid "``tween`` is a component-style node that can animate and control any value or method from any other node" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:113 -msgid "The project uses a simple organization that works for game jams and tiny games." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:115 -msgid "At the root of the project, in the `res://` folder, you will find the `LevelMockup`. That's the main game scene and the one we will work with. All the components that make up the game are in the `scenes/` folder. The `assets/` folder contains the game sprites and the font for the HP counter. In the `scripts/` folder you will find the enemy, the player, and the GUI controller scripts." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:117 -msgid "Click the edit scene icon to the right of the node in the scene tree to open the scene in the editor. You'll see the LifeBar and EnergyBar are sub-scenes themselves." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:121 -msgid "The scene tree, with the Player scene set to display its children" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:124 -msgid "Set up the Lifebar with the Player's max\\_health" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:126 -msgid "We have to tell the GUI somehow what the player's current health is, to update the lifebar's texture, and to display the remaining health in the HP counter in the top left corner of the screen. To do this we send the player's health to the GUI every time they take damage. The GUI will then update the ``Lifebar`` and ``Number`` nodes with this value." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:132 -msgid "We could stop here to display the number, but we need to initialize the bar's ``max_value`` for it to update in the right proportions. The first step is thus to tell the ``GUI`` what the green character's ``max_health`` is." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:139 -msgid "The bar, a `TextureProgress`, has a `max_value` of `100` by default. If you don't need to display the character's health with a number, you don't need to change its `max_value` property. You send a percentage from the `Player` to the `GUI` instead: `health / max_health * 100`." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:143 -msgid "Click the script icon to the right of the ``GUI`` in the Scene dock to open its script. In the ``_ready`` function, we're going to store the ``Player``'s ``max_health`` in a new variable and use it to set the ``bar``'s ``max_value``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:164 -msgid "Let's break it down. ``$\"../Characters/Player\"`` is a shorthand that goes one node up in the scene tree, and retrieves the ``Characters/Player`` node from there. It gives us access to the node. The second part of the statement, ``.max_health``, accesses the ``max_health`` on the Player node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:170 -msgid "The second line assigns this value to ``bar.max_value``. You could combine the two lines into one, but we'll need to use ``player_max_health`` again later in the tutorial." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:174 -msgid "``Player.gd`` sets the ``health`` to ``max_health`` at the start of the game, so we could work with this. Why do we still use ``max_health``? There are two reasons:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:178 -msgid "We don't have the guarantee that ``health`` will always equal ``max_health``: a future version of the game may load a level where the player already lost some health." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:184 -msgid "When you open a scene in the game, Godot creates nodes one by one, following the order in your Scene dock, from top to bottom. `GUI` and `Player` are not part of the same node branch. To make sure they both exist when we access each other, we have to use the `_ready` function. Godot calls `_ready` right after it loaded all nodes, before the game starts. It's the perfect function to set everything up and prepare the game session. Learn more about _ready: :doc:`scripting_continued`" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:188 -msgid "Update health with a signal when the player takes a hit" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:190 -msgid "Our GUI is ready to receive the ``health`` value updates from the ``Player``. To achieve this we're going to use **signals**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:195 -msgid "There are many useful built-in signals like `enter_tree` and `exit_tree`, that all nodes emit when they are respectively created and destroyed. You can also create your own using the `signal` keyword. On the `Player` node, you'll find two signals we created for you: `died` and `health_changed`." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:197 -msgid "Why don't we directly get the ``Player`` node in the ``_process`` function and look at the health value? Accessing nodes this way creates tight coupling between them. If you did it sparingly it may work. As your game grows bigger, you may have many more connections. If you get nodes this way it gets complex quickly. Not only that: you need to listen to the state change constantly in the ``_process`` function. This check happens 60 times a second and you'll likely break the game because of the order in which the code runs." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:206 -msgid "On a given frame you may look at another node's property *before* it was updated: you get a value from the last frame. This leads to obscure bugs that are hard to fix. On the other hand, a signal is emitted right after a change happened. It **guarantees** you're getting a fresh piece of information. And you will update the state of your connected node *right after* the change happened." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:215 -msgid "The Observer pattern, that signals derive from, still adds a bit of coupling between node branches. But it's generally lighter and more secure than accessing nodes directly to communicate between two separate classes. It can be okay for a parent node to get values from its children. But you'll want to favor signals if you're working with two separate branches. Read Game Programming Patterns for more information on the `Observer pattern `_. The `full book `_ is available online for free." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:219 -msgid "With this in mind, let's connect the ``GUI`` to the ``Player``. Click on the ``Player`` node in the scene dock to select it. Head down to the Inspector and click on the Node tab. This is the place to connect nodes to listen to the one you selected." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:224 -msgid "The first section lists custom signals defined in ``Player.gd``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:226 -msgid "``died`` is emitted when the character died. We will use it in a moment to hide the UI." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:228 -msgid "``health_changed`` is emitted when the character got hit." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:232 -msgid "We're connecting to the health\\_changed signal" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:234 -msgid "Select ``health_changed`` and click on the Connect button in the bottom right corner to open the Connect Signal window. On the left side you can pick the node that will listen to this signal. Select the ``GUI`` node. The right side of the screen lets you pack optional values with the signal. We already took care of it in ``Player.gd``. In general I recommend not to add too many arguments using this window as they're less convenient than doing it from the code." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:244 -msgid "The Connect Signal window with the GUI node selected" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:248 -msgid "You can optionally connect nodes from the code. However doing it from the editor has two advantages:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:250 -msgid "Godot can write new callback functions for you in the connected script" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:251 -msgid "An emitter icon appears next to the node that emits the signal in the Scene dock" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:253 -msgid "At the bottom of the window you will find the path to the node you selected. We're interested in the second row called \"Method in Node\". This is the method on the ``GUI`` node that gets called when the signal is emitted. This method receives the values sent with the signal and lets you process them. If you look to the right, there is a \"Make Function\" radio button that is on by default. Click the connect button at the bottom of the window. Godot creates the method inside the ``GUI`` node. The script editor opens with the cursor inside a new ``_on_Player_health_changed`` function." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:265 -msgid "When you connect nodes from the editor, Godot generates a method name with the following pattern: ``_on_EmitterName_signal_name``. If you wrote the method already, the \"Make Function\" option will keep it. You may replace the name with anything you'd like." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:272 -msgid "Godot writes the callback method for you and takes you to it" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:274 -msgid "Inside the parentheses after the function name, add a ``player_health`` argument. When the player emits the ``health_changed`` signal, it will send its current ``health`` alongside it. Your code should look like:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:292 -msgid "The engine does not convert PascalCase to snake_case, for C# examples we'll be using PascalCase for method names & camelCase for method parameters, which follows the official `C# naming conventions. `_" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:299 -msgid "In Player.gd, when the Player emits the health\\_changed signal, it also sends its health value" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:302 -msgid "Inside ``_on_Player_health_changed``, let's call a second function called ``update_health`` and pass it the ``player_health`` variable." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:307 -msgid "We could directly update the health value on `LifeBar` and `Number`. There are two reasons to use this method instead:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:309 -msgid "The name makes it clear for our future selves and teammates that when the player took damage, we update the health count on the GUI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:310 -msgid "We will reuse this method a bit later" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:312 -msgid "Create a new ``update_health`` method below ``_on_Player_health_changed``. It takes a new\\_value as its only argument:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:327 -msgid "This method needs to:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:329 -msgid "set the ``Number`` node's ``text`` to ``new_value`` converted to a string" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:331 -msgid "set the ``TextureProgress``'s ``value`` to ``new_value``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:350 -msgid "``str`` is a built-in function that converts about any value to text. ``Number``'s ``text`` property requires a string, so we can't assign it to ``new_value`` directly" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:354 -msgid "Also call ``update_health`` at the end of the ``_ready`` function to initialize the ``Number`` node's ``text`` with the right value at the start of the game. Press :kbd:`F5` to test the game: the life bar updates with every attack!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:361 -msgid "Both the Number node and the TextureProgress update when the Player takes a hit" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:365 -msgid "Animate the loss of life with the Tween node" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:367 -msgid "Our interface is functional, but it could use some animation. That's a good opportunity to introduce the ``Tween`` node, an essential tool to animate properties. ``Tween`` animates anything you'd like from a start to an end state over a certain duration. For example, it can animate the health on the ``TextureProgress`` from its current level to the ``Player``'s new ``health`` when the character takes damage." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:374 -msgid "The ``GUI`` scene already contains a ``Tween`` child node stored in the ``tween`` variable. Let's now use it. We have to make some changes to ``update_health``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:378 -msgid "We will use the ``Tween`` node's ``interpolate_property`` method. It takes seven arguments:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:381 -msgid "A reference to the node who owns the property to animate" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:382 -msgid "The property's identifier as a string" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:383 -msgid "The starting value" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:384 -msgid "The end value" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:385 -msgid "The animation's duration in seconds" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:386 -msgid "The type of the transition" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:387 -msgid "The easing to use in combination with the equation." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:389 -msgid "The last two arguments combined correspond to an easing equation. This controls how the value evolves from the start to the end point." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:393 -msgid "Click the script icon next to the ``GUI`` node to open it again. The ``Number`` node needs text to update itself, and the ``Bar`` needs a float or an integer. We can use ``interpolate_property`` to animate a number, but not to animate text directly. We're going to use it to animate a new ``GUI`` variable named ``animated_health``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:399 -msgid "At the top of the script, define a new variable, name it ``animated_health``, and set its value to 0. Navigate back to the ``update_health`` method and clear its content. Let's animate the ``animated_health`` value. Call the ``Tween`` node's ``interpolate_property`` method:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:421 -msgid "Let's break down the call:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:427 -msgid "We target ``animated_health`` on ``self``, that is to say the ``GUI`` node. ``Tween``'s interpolate\\_property takes the property's name as a string. That's why we write it as ``\"animated_health\"``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:435 -msgid "The starting point is the current value the bar's at. We still have to code this part, but it's going to be ``animated_health``. The end point of the animation is the ``Player``'s ``health`` after the ``health_changed``: that's ``new_value``. And ``0.6`` is the animation's duration in seconds." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:441 -msgid "The animation will not play until we activated the ``Tween`` node with ``tween.start()``. We only have to do this once if the node is not active. Add this code after the last line:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:460 -msgid "Although we could animate the `health` property on the `Player`, we shouldn't. Characters should lose life instantly when they get hit. It makes it a lot easier to manage their state, like to know when one died. You always want to store animations in a separate data container or node. The `tween` node is perfect for code-controlled animations. For hand-made animations, check out `AnimationPlayer`." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:463 -msgid "Assign the animated\\_health to the LifeBar" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:465 -msgid "Now the ``animated_health`` variable animates but we don't update the actual ``Bar`` and ``Number`` nodes anymore. Let's fix this." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:468 -msgid "So far, the update\\_health method looks like this:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:492 -msgid "In this specific case, because ``number_label`` takes text, we need to use the ``_process`` method to animate it. Let's now update the ``Number`` and ``TextureProgress`` nodes like before, inside of ``_process``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:514 -msgid "`number_label` and `bar` are variables that store references to the `Number` and `TextureProgress` nodes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:516 -msgid "Play the game to see the bar animate smoothly. But the text displays decimal number and looks like a mess. And considering the style of the game, it'd be nice for the life bar to animate in a choppier fashion." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:522 -msgid "The animation is smooth, but the number is broken" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:524 -msgid "We can fix both problems by rounding out ``animated_health``. Use a local variable named ``round_value`` to store the rounded ``animated_health``. Then assign it to ``number_label.text`` and ``bar.value``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:546 -msgid "Try the game again to see a nice blocky animation." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:550 -msgid "By rounding out animated\\_health, we kill two birds with one stone" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:554 -msgid "Every time the player takes a hit, the ``GUI`` calls ``_on_Player_health_changed``, which in turn calls ``update_health``. This updates the animation and the ``number_label`` and ``bar`` follow in ``_process``. The animated life bar that shows the health going down gradually is a trick. It makes the GUI feel alive. If the ``Player`` takes 3 damage, it happens in an instant." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:562 -msgid "Fade the bar when the Player dies" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:564 -msgid "When the green character dies, it plays a death animation and fades out. At this point, we shouldn't show the interface anymore. Let's fade the bar as well when the character died. We will reuse the same ``Tween`` node as it manages multiple animations in parallel for us." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:569 -msgid "First, the ``GUI`` needs to connect to the ``Player``'s ``died`` signal to know when it died. Press :kbd:`Ctrl + F1` to jump back to the 2D Workspace. Select the ``Player`` node in the Scene dock and click on the Node tab next to the Inspector." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:574 -msgid "Find the ``died`` signal, select it, and click the Connect button." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:578 -msgid "The signal should already have the Enemy connected to it" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:580 -msgid "In the Connecting Signal window, connect to the ``GUI`` node again. The Path to Node should be ``../../GUI`` and the Method in Node should show ``_on_Player_died``. Leave the Make Function option on and click Connect at the bottom of the window. This will take you to the ``GUI.gd`` file in the Script Workspace." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:588 -msgid "You should get these values in the Connecting Signal window" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:592 -msgid "You should see a pattern by now: every time the GUI needs a new piece of information, we emit a new signal. Use them wisely: the more connections you add, the harder they are to track." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:594 -msgid "To animate a fade on a UI element, we have to use its ``modulate`` property. ``modulate`` is a ``Color`` that multiplies the colors of our textures." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:600 -msgid "`modulate` comes from the `CanvasItem` class, All 2D and UI nodes inherit from it. It lets you toggle the visibility of the node, assign a shader to it, and modify it using a color with `modulate`." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:602 -msgid "``modulate`` takes a ``Color`` value with 4 channels: red, green, blue and alpha. If we darken any of the first three channels it darkens the interface. If we lower the alpha channel, our interface fades out." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:606 -msgid "We're going to tween between two color values: from a white with an alpha of ``1``, that is to say at full opacity, to a pure white with an alpha value of ``0``, completely transparent. Let's add two variables at the top of the ``_on_Player_died`` method and name them ``start_color`` and ``end_color``. Use the ``Color()`` constructor to build two ``Color`` values." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:628 -msgid "``Color(1.0, 1.0, 1.0)`` corresponds to white. The fourth argument, respectively ``1.0`` and ``0.0`` in ``start_color`` and ``end_color``, is the alpha channel." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:632 -msgid "We then have to call the ``interpolate_property`` method of the ``Tween`` node again:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:645 -msgid "This time, we change the ``modulate`` property and have it animate from ``start_color`` to the ``end_color``. The duration is of one second, with a linear transition. Here's the complete ``_on_Player_died`` method:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:669 -msgid "And that is it. You may now play the game to see the final result!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:673 -msgid "The final result. Congratulations for getting there!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_code_a_life_bar.rst:677 -msgid "Using the exact same techniques, you can change the color of the bar when the Player gets poisoned, turn the bar red when its health drops low, shake the UI when they take a critical hit... the principle is the same: emit a signal to forward the information from the `Player` to the `GUI` and let the `GUI` process it." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/ui_game_user_interface.pot b/sphinx/templates/getting_started/step_by_step/ui_game_user_interface.pot deleted file mode 100644 index 01a7aaa17b..0000000000 --- a/sphinx/templates/getting_started/step_by_step/ui_game_user_interface.pot +++ /dev/null @@ -1,531 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:4 -msgid "Design the GUI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:6 -msgid "Now that you've nailed the basics, we're going to see how to build a game Graphical User Interface (GUI) with reusable UI components: a life bar, an energy bar, and bomb and emerald counters. By the end of this tutorial, you'll have a game GUI, ready to control with GDscript or VisualScript:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:13 -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:621 -msgid "The final result" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:15 -msgid "You'll also learn to:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:17 -msgid "Create flexible UI components" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:18 -msgid "Use scene inheritance" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:19 -msgid "Build a complex UI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:21 -msgid "Download the project files: :download:`ui_gui_design.zip ` and extract the archive. Import the `start/` project in Godot to follow this tutorial. The `end/` folder contains the final result." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:25 -msgid "You can watch this tutorial as a `video on YouTube `_." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:28 -msgid "Breaking down the UI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:30 -msgid "Let's break down the final UI and plan the containers we'll use. As in the :doc:`ui_main_menu`, it starts with a ``MarginContainer``. Then, we can see up to three columns:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:34 -msgid "The life and energy counters on the left" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:35 -msgid "The life and energy bars" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:36 -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:42 -msgid "The bomb and emerald counters on the right" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:38 -msgid "But the bar's label and the gauge are two parts of the same UI element. If we think of them this way, we're left with two columns:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:41 -msgid "The life and energy bars on the left" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:44 -msgid "This makes it easier to nest containers: we have some margins around the border of the screen using a ``MarginContainer``, followed by an ``HBoxContainer`` to manage our two columns. The two bars stack on top of one another inside a ``VBoxContainer``. And we'll need a last ``HBoxContainer`` in the right column to place the bomb and emerald counters side-by-side." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:53 -msgid "We get a clean UI layout with only 4 containers" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:55 -msgid "We will need extra containers inside the individual UI components, but this gives us the main GUI scene's structure. With this plan in place, we can jump into Godot and create our GUI." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:60 -msgid "Create the base GUI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:62 -msgid "There are two possible approaches to the GUI: we can design elements in separate scenes and put them together, or prototype everything in a single scene and break it down later. I recommend working with a single scene as you can play with your UI's placement and proportions faster this way. Once it looks good, you can save entire sections of the node tree as reusable sub-scenes. We'll do that in a moment." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:69 -msgid "For now, let's start with a few containers." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:71 -msgid "Create a new scene and add a ``MarginContainer``. Select the node and name it ``GUI``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:74 -msgid "We want our interface to anchor to the top of the screen. Select the ``GUI`` node and click the Layout button at the top of the viewport. Select the ``Top Wide`` option. The ``GUI`` node will anchor to the top edge of its parent, the viewport by default. It will resize automatically on the vertical axis to make space for its child UI components." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:80 -msgid "Save the scene as ``GUI.tscn``. We will put the entire GUI in it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:82 -msgid "With the ``MarginContainer`` selected, head to the inspector and scroll down to the custom constants section. Unfold it and click the field next to each of the ``Margin`` properties. Set them all to ``20`` pixels. Next, add an ``HBoxContainer`` node. This one will contain our two bars on the left and separate them from the two counters on the right." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:88 -msgid "We want to stack the bars vertically inside the ``HBoxContainer``. Add a ``VBoxContainer`` as a child of ``HBoxContainer`` and name it ``Bars``. Select the parent ``HBoxContainer`` again and this time, add another ``HBoxContainer`` as a child of it. Call it ``Counters``. With these four containers, we have the base for our GUI scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:95 -msgid "You should have 4 containers that look like this" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:99 -msgid "We can work this way because we first broke down our UI design and took a few moments to think about the containers we'd use. When you follow a tutorial like this, it may seem weird. But once you're working on real games, you'll see it's an efficient workflow." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:105 -msgid "Create the bars' base" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:107 -msgid "Each bar is split into two sub-elements that align horizontally: the label with the health count on the left, and the gauge on the right. Once again, the ``HBoxContainer`` is the perfect tool for the job. Select the ``Bars`` node and add a new ``HBoxContainer`` inside of it. Name it ``Bar``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:113 -msgid "The label itself requires at least three nodes: a ``NinePatchRect`` for the background, on top of which we'll add a texture on the left, either ``HP`` or ``EP``, and a ``Label`` on the right for the value. We can nest ``Control`` nodes however we want. We could use the ``NinePatchRect`` as a parent for the two other elements, as it encompasses them. In general, you want to use containers instead, as their role is to help organize UI components. We'll need a ``MarginContainer`` later anyway to add some space between the life count and the gauge. Select the ``Bar`` and add a ``MarginContainer``. Name it ``Count``. Inside of it, add three nodes:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:124 -msgid "A ``NinePatchRect`` named ``Background``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:125 -msgid "A ``TextureRect`` named ``Title``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:126 -msgid "And a ``Label`` named ``Number``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:128 -msgid "To add the nodes as siblings, always select the ``Count`` node first." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:132 -msgid "Your scene tree should look like this. We're ready to throw in some textures" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:135 -msgid "Our scene is still empty. It's time to throw in some textures. To load the textures, head to the FileSystem dock to the left of the viewport. Browse down to the res://assets/GUI folder." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:141 -msgid "You should see a list of textures that we'll use to skin our interface." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:144 -msgid "Select the ``Background`` in the Scene dock. In the Inspector, you should see a ``Texture`` property. In the FileSystem tab, click and drag ``label_HP_bg.png`` onto the ``Texture`` slot. It stays squashed. The parent MarginContainer will force its size down to 0 until we force elements inside the container to have a minimum size. Select the ``Background`` node. In the Inspector, scroll down to the Rect section. Set ``Min Size`` to (100, 40). You should see the ``Background`` resize along with its parent containers." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:153 -msgid "Next, select the ``Title`` and drag and drop ``label_HP.png`` into its ``Texture`` slot. Select the ``Number`` node, click the field next to the ``Text`` property and type ``10``. This way, we can see both nodes in the viewport. They should stack up in the top-left corner of their parent ``MarginContainer``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:161 -msgid "If you select both nodes, you should see something like this" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:163 -msgid "As they have a container as their direct parent, we cannot move them freely: the ``Count`` node will always reset their anchors, their size and position. Try to move and resize the nodes in the viewport. Then, select any of the three textures and press :kbd:`Ctrl + Up` or :kbd:`Ctrl + Down` to reorder them in the Scene dock. They'll snap back to their previous size and position." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:170 -msgid "Parent containers control the size, the scale, the margins, and the anchors of their direct children. To modify the nodes, you must nest them inside a regular Control or another UI element. We'll use the ``Background`` as a parent for the ``Title`` and ``Number``. Select both the ``Title`` and ``Number``, and drag and drop them onto ``Background``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:179 -msgid "By using the Background node as the two textures' parent, we take control away from the Count MarginContainer" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:182 -msgid "Select the ``Title`` and in the Inspector, change its ``Stretch Mode`` property to ``Keep Centered``. Next find the ``Rect`` category in the Inspector and change the ``Size`` property to (50, 40) so it only takes the left half of the background. Next, select the ``Number`` node. In the viewport, click the ``Layout`` menu and click ``Full Rect``. The node will resize to fit the ``Background``. Head to the Inspector and change its ``Align`` property to ``Right``, and the ``Valign`` property to ``Center``. The text should snap to the center of the ``Background``'s right edge. Resize the node horizontally, so it takes the right half of the ``Background`` and there's a bit of padding with the right edge." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:195 -msgid "Here's how the nodes' bounding boxes should look in the viewport. Keep it rough, you don't need to place them too precisely for now." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:199 -msgid "Replace the Label's font" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:201 -msgid "The label's font is too small. We need to replace it. Select the ``Number`` node and in the Inspector, scroll down to the ``Control`` class, and find the ``Custom Font`` category. Click the field next to the ``Font`` property and click on ``New Dynamic Font``. Click on the field again and select Edit." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:207 -msgid "You will enter the ``Dynamic Font`` resource. Unfold the ``Font`` category and click the field next to ``Font Data``. Click the ``Load`` button. In the file browser, navigate down to the assets/font folder and double click ``Comfortaa-Bold.ttf`` to open it. You should see the font update in the viewport. Unfold the settings category to change the font size. Set the ``Size`` property to a higher value, like ``24`` or ``28``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:215 -msgid "We now need the text's baseline, the number's lower edge, to align with the HP texture on the left. To do so, still in the ``DynamicFont`` resource, you can tweak the ``Bottom`` property under the ``Extra Spacing`` category. It adds some bottom padding to the text. Click the ``Number`` node in the Scene tab to go back to the node's properties and change the ``Valign`` to ``Bottom``. To adjust the text's baseline, click on the font field under the ``Custom Font`` category again and tweak the ``Bottom`` property until the text aligns with the ``Title`` node. I used a value of ``2`` pixels." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:227 -msgid "With a Bottom value of 2 pixels, the Number aligns with the Title" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:229 -msgid "With this, we finished the hardest part of the GUI. Congratulations! Let's move on to the simpler nodes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:233 -msgid "Add the progress bar" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:235 -msgid "We need one last element to complete our life bar: the gauge itself. Godot ships with a ``TextureProgress`` node that has everything we need." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:238 -msgid "Select the Bar node and add a ``TextureProgress`` inside of it. Name it ``Gauge``. In the inspector unfold the ``Textures`` section. Head to the FileSystem dock and drag and drop the ``lifebar_bg.png`` texture onto the ``Under`` slot. Do the same with the ``lifebar_fill.png`` image and drop it onto the ``Progress`` slot. Under the ``Range`` class in the inspector, change the ``Value`` property to ``50`` to see the gauge fill up." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:246 -msgid "With only five ``Control`` nodes, our first bar is ready to use." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:250 -msgid "That's it, our life bar is ready. This last part was quick, wasn't it? That's thanks to our robust container setup." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:254 -msgid "Design the bomb and emerald counters" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:256 -msgid "The bomb and emerald counters are like the bar's ``Count`` node. So we'll duplicate it and use it as a template." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:259 -msgid "Under the ``Bar`` node, select ``Count`` and press :kbd:`Ctrl + D` to duplicate it. Drag and drop the new node under the ``Counters`` ``HBoxContainer`` at the bottom of the scene tree. You should see it resize automatically. Don't worry about this for now, we'll fix the size soon." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:264 -msgid "Rename the ``Count2`` node to ``Counter``. Unlike the bars, we want the number to be on the left, and an icon to sit on the right. The setup is the same: we need a background (a ``NinePatchRect``), the title, and the number nodes. The ``Title`` node is a ``TextureRect``, so it's what we need to display the icon. In the scene tree, select the ``Title`` node, and rename it to ``Icon``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:273 -msgid "Here's how your node tree should look so far" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:275 -msgid "With the ``Icon`` node selected, in the inspector, scroll to the top to see the ``Texture`` slot. Head to the FileSystem dock on the left and select the ``bombs_icon.png``. Drag and drop it onto the ``Texture`` slot. In the Scene Tab select both the ``Icon`` and the ``Number`` nodes. Click the Layout menu in the toolbar at the top of the viewport and select ``Full Rect``. Both nodes will update to fit the size of the ``Background``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:285 -msgid "The nodes anchor to the entire Background, but their position is off" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:287 -msgid "Let's change the ``Number``'s align properties to move it to the left and center of the ``Background``. Select the ``Number`` node, change its ``Align`` property to left and the ``Valign`` property to center. Then resize its left edge a bit to add some padding between the left edge of the ``Background`` and the text." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:295 -msgid "The Number node aligned to the left and center" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:297 -msgid "To overlap the Icon and the background, we need a few tweaks. First, our background is a bit too tall. It's because it's inside a margin container that is controlled by the top-most GUI node. Select the GUI node at the top of the scene tree and downsize it vertically so that it's as thin as possible. You'll see the gauge prevents you from making it too small. A container cannot be smaller than the minimal size of its children. The container's margins also weigh in." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:305 -msgid "Select the Icon, click the Layout menu, and select ``Full Rect`` to re-center it. We need it to anchor to the ``Background``'s right edge. Open the Layout menu again and select ``Center Right``. Move the icon up so it is centered vertically with the ``Background``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:313 -msgid "The bomb icon anchors to the Background's right edge. Resize the Counter container to see the Icon node stick to its right side" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:316 -msgid "Because we duplicated the ``Counter`` from the bar's ``Count``, the ``Number`` node's font is off. Select the ``Number`` node again, head to the ``Font`` property, and click it to access the ``DynamicFont`` resource. In the ``Extra Spacing`` section, change the ``Bottom`` value to ``0`` to reset the font's baseline. Our counter now works as expected." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:323 -msgid "Let's make the ``Counters`` anchor to the right edge of the viewport. To do so, we need to set the ``Bars`` container take all the available horizontal space it can. Select the ``Bars`` node and scroll down to the ``Size Flags`` category. In the ``Horizontal`` category, check the ``Expand`` value. The ``Bars`` node should resize and push the counter to the right side of the screen." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:331 -msgid "An expanding container eats all the space it can from its parent, pushing everything else along the way" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:335 -msgid "Turn the bar and counter into reusable UI components" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:337 -msgid "We have one bar and one counter widget. But we need two of each. We may need to change the bars' design or their functionality later on. It'd be great if we could have a single scene to store a UI element's template, and child scenes to work on variations. Godot lets us do this with Inherited Scenes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:343 -msgid "Let's save both the ``Counter`` and the ``Bar`` branches as separate scenes that we'll reduce to create the ``LifeBar``, the ``EnergyBar``, the ``BombCounter``, and the ``EmeraldCounter``. Select the ``Bar`` HBoxContainer. Right click on it and click on ``Save Branch as Scene``. Save the scene as ``Bar.tscn``. You should see the node branch turn it to a single ``Bar`` node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:352 -msgid "A scene is a tree of nodes. The topmost node is the tree's **root**, and the children at the bottom of the hierarchy are **leaves**. Any node other than the root along with one or more children is a **branch**. We can encapsulate node branches into separate scenes, or load and merge them from other scenes into the active one. Right click on any node in the Scene dock and select ``Save Branch as Scene`` or ``Merge from Scene``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:360 -msgid "Then, select the ``Counter`` node and do the same. Right click, ``Save Branch as Scene``, and save it as ``Counter.tscn``. A new edit scene icon appears to the right of the nodes in the scene tree. Click on the one next to ``Bar`` to open the corresponding scene. Resize the ``Bar`` node so that its bounding box fits its content. The way we named and placed the Control nodes, we're ready to inherit this template and create the life bar. It's the same for the ``Counter``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:370 -msgid "With no extra changes, our Bar is ready to use" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:373 -msgid "Use scene inheritance to create the remaining elements" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:375 -msgid "We need two bars that work the same way: they should feature a label on the left, with some value, and a horizontal gauge on the right. The only difference is that one has the HP label and is green, while the other is called EP and is yellow. Godot gives us a powerful tool to create a common base to reuse for all bars in the game: **inherited scenes**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:383 -msgid "Inherited scenes help us keep the GUI scene clean. In the end, we will only have containers and one node for each UI component." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:386 -msgid "On an inherited scene, you can change any property of every node in the inspector, aside from its name. If you modify and save the parent scene, all the inherited scenes update to reflect the changes. If you change a value in the inherited scene, it will always override the parent's property. It's useful for UIs, as they often require variations of the same elements. In general, in UI design, buttons, panels etc. share a common base style and interactions. We don't want to copy it over to all variations manually." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:395 -msgid "A reload icon will appear next to the properties you override. Click it to reset the value to the parent scene's default." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:400 -msgid "Think of scene inheritance like the node tree, or the ``extends`` keyword in GDScript. An inherited scene does everything like its parent, but you can override properties, resources and add extra nodes and scripts to extend its functionality." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:406 -msgid "Inherit the Bar Scene to build the LifeBar" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:408 -msgid "Go to ``Scene -> New Inherited Scene`` to create a new type of ``Bar``. Select the Bar scene and open it. You should see a new [unsaved] tab, that's like your ``Bar``, but with all nodes except the root in grey. Press :kbd:`Ctrl + S` (:kbd:`Cmd + S` on macOS) to save the new inherited scene and name it ``LifeBar``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:416 -msgid "You can't rename grey nodes. This tells you they have a parent scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:418 -msgid "First, rename the root or top level node to ``LifeBar``. We always want the root to describe exactly what this UI component is. The name differentiates this bar from the ``EnergyBar`` we'll create next. The other nodes inside the scene should describe the component's structure with broad terms, so it works with all inherited scenes. Like our ``TextureProgress`` and ``Number`` nodes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:427 -msgid "If you've ever done web design, it's the same spirit as working with CSS: you create a base class, and add variations with modifier classes. From a base button class, you'll have button-green and button-red variations for the user to accept and refuse prompts. The new class contains the name of the parent element and an extra keyword to explain how it modifies it. When we create an inherited scene and change the name of the top level node, we're doing the same thing." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:436 -msgid "Design the EnergyBar" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:438 -msgid "We already setup the ``LifeBar``'s design with the main ``Bar`` scene. Now we need the ``EnergyBar``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:441 -msgid "Let's create a new inherited scene, and once again select the ``Bar.tscn`` scene and open it. Double-click on the ``Bar`` root node and rename it to ``EnergyBar``. Save the new scene as ``EnergyBar.tscn``. We need to replace the HP texture with EP one, and to change the textures on the gauge." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:447 -msgid "Head to the FileSystem dock on the left, select the ``Title`` node in the Scene tree and drag and drop the ``label_EP.png`` file onto the texture slot. Select the ``Number`` node and change the ``Text`` property to a different value like ``14``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:452 -msgid "You'll notice the EP texture is smaller than the HP one. We should update the ``Number``'s font size to better fit it. A font is a resource. All the nodes in the entire project that use this resource will be affected by any property we change. You can try to change the size to a huge value like ``40`` and switch back to the ``LifeBar`` or the ``Bar`` scenes. You will see the text increased in size." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:461 -msgid "If we change the font resource, all the nodes that use it are affected" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:464 -msgid "To change the font size on this node only, we must create a copy of the font resource. Select the ``Number`` node again and click on the wrench and screwdriver icon on the top right of the inspector. In the drop-down menu, select the ``Make Sub-Resources Unique`` option. Godot will find all the resources this node uses and create unique copies for us." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:472 -msgid "Use this option to create unique copies of the resources for one node" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:476 -msgid "When you duplicate a node from the Scene tree, with :kbd:`Ctrl + D` (:kbd:`Cmd + D` on macOS), it shares its resources with the original node. You need to use ``Make Sub-Resources Unique`` before you can tweak the resources without affecting the source node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:481 -msgid "Scroll down to the ``Custom Font`` section and open ``Font``. Lower the ``Size`` to a smaller value like ``20`` or ``22``. You may also need to adjust the ``Bottom`` spacing value to align the text's baseline with the EP label on the left." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:488 -msgid "The EP Count widget, with a smaller font than its HP counterpart" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:490 -msgid "Now, select the ``TextureProgress`` node. Drag the ``energy_bar_bg.png`` file onto the ``Under`` slot and do the same for ``energy_bar_fill.png`` and drop it onto the ``Progress`` texture slot." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:494 -msgid "You can resize the node vertically so that its bounding rectangle fits the gauge. Do the same with the ``Count`` node until its size aligns with that of the bar. Because the minimal size of ``TextureProgress`` is set based on its textures, you won't be able to downsize the ``Count`` node below that. That is also the size the ``Bar`` container will have. You may downscale this one as well." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:501 -msgid "Last but not least, the ``Background`` container has a minimum size that makes it a bit large. Select it and in the ``Rect`` section, change the ``Min Size`` property down to ``80`` pixels. It should resize automatically and the ``Title`` and ``Number`` nodes should reposition as well." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:509 -msgid "The Count looks better now it's a bit smaller" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:513 -msgid "The Count node's size affects the position of the TextureProgress. As we'll align our bars vertically in a moment, we're better off using the Counter's left margin to resize our EP label. This way both the EnergyBar's Count and the LifeBar's Count nodes are one hundred pixels wide, so both gauges will align perfectly." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:520 -msgid "Prepare the bomb and emerald counters" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:522 -msgid "Let us now take care of the counters. Go to ``Scene -> New Inherited Scene`` and select the ``Counter.tscn`` as a base. Rename the root node as ``BombCounter`` too. Save the new scene as ``BombCounter.tscn``. That's all for this scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:529 -msgid "The bomb counter is the same as the original Counter scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:531 -msgid "Go to ``Scene -> New Inherited Scene`` again and select ``Counter.tscn`` once more. Rename the root node ``EmeraldCounter`` and save the scene as ``EmeraldCounter.tscn``. For this one, we mainly need to replace the bomb icon with the emerald icon. In the FileSystem tab, drag the ``emeralds_icon.png`` onto the ``Icon`` node's ``Texture`` slot. ``Icon`` already anchors to the right edge of the ``Background`` node so we can change its position and it will scale and reposition with the ``EmeraldCounter`` container. Shift the emerald icon a bit to the right and down. Use the Arrow Keys on the keyboard to nudge its position. Save, and we're done with all the UI elements." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:544 -msgid "The emerald counter should look something like this" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:547 -msgid "Add the UI components to the final GUI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:549 -msgid "Time to add all the UI elements to the main GUI scene. Open the ``GUI.tscn`` scene again, and delete the ``Bar`` and ``Counter`` nodes. In the FileSystem dock, find the ``LifeBar.tscn`` and drag and drop it onto the ``Bars`` container in the scene tree. Do the same for the ``EnergyBar``. You should see them align vertically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:557 -msgid "The LifeBar and the EnergyBar align automatically" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:559 -msgid "Now, drag and drop the ``BombCounter.tscn`` and ``EmeraldCounter.tscn`` scenes onto the ``Counters`` node. They'll resize automatically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:564 -msgid "The nodes resize to take all the available vertical space" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:566 -msgid "To let the ``EmeraldCounter`` and ``BombCounter`` use the size we defined in ``Counter.tscn``, we need to change the ``Size Flags`` on the ``Counters`` container. Select the ``Counters`` node and unfold the ``Size Flags`` section in the Inspector. Uncheck the ``Fill`` tag for the ``Vertical`` property, and check ``Shrink Center`` so the container centers inside the ``HBoxContainer``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:575 -msgid "Now both counters have a decent size" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:579 -msgid "Change the ``Min Size`` property of the ``Counters`` container to control the height of the counters' background." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:582 -msgid "We have one small issue left with the EP label on the EnergyBar: the 2 bars should align vertically. Click the icon next to the ``EnergyBar`` node to open its scene. Select the ``Count`` node and scroll down to the ``Custom Constants`` section. Add a ``Margin Left`` of ``20``. In the ``Rect`` section set the node's ``Min Size`` back to 100, the same value as on the LifeBar. The ``Count`` should now have some margin on the left. If you save and go back to the GUI scene, it will be aligned vertically with the ``LifeBar``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:593 -msgid "The 2 bars align perfectly" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:597 -msgid "We could have set up the ``EnergyBar`` this way a few moments ago. But this shows you that you can go back to any scene anytime, tweak it, and see the changes propagate through the project!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:602 -msgid "Place the GUI onto the game's mockup" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:604 -msgid "To wrap up the tutorial we're going to insert the GUI onto the game's mockup scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:607 -msgid "Head to the FileSystem dock and open ``LevelMockup.tscn``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:609 -msgid "Drag-and-drop the ``GUI.tscn`` scene right below the ``bg`` node and above the ``Characters``. The GUI will scale to fit the entire viewport. Head to the Layout menu and select the ``Center Top`` option so it anchors to the top edge of the game window. Then resize the GUI to make it as small as possible vertically. Now you can see how the interface looks in the context of the game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:616 -msgid "Congratulations for getting to the end of this long tutorial. You can find the final project here: :download:`ui_gui_design.zip `." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_game_user_interface.rst:625 -msgid "**A final note about Responsive Design**. If you resize the GUI, you'll see the nodes move, but the textures and text won't scale. The GUI also has a minimum size, based on the textures inside of it. In games, we don't need the interface to be as flexible as that of a website. You almost never want to support both landscape and portrait screen orientations. It's one or the other. In landscape orientation, the most common ratios range from 4:3 to 16:9. They are close to one another. That's why it's enough for the GUI elements to only move horizontally when we change the window size." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/ui_introduction_to_the_ui_system.pot b/sphinx/templates/getting_started/step_by_step/ui_introduction_to_the_ui_system.pot deleted file mode 100644 index ffd5b34183..0000000000 --- a/sphinx/templates/getting_started/step_by_step/ui_introduction_to_the_ui_system.pot +++ /dev/null @@ -1,405 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:4 -msgid "Design interfaces with the Control nodes" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:6 -msgid "Computer displays, mobile phones, and TV screens come in all shapes and sizes. To ship a game, you'll need to support different screen ratios and resolutions. It can be hard to build responsive interfaces that adapt to all platforms. Thankfully, Godot comes with robust tools to design and manage a responsive User Interface." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:14 -msgid "Godot's editor is made with the engine's UI framework" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:16 -msgid "This guide will get you started with UI design. You will learn:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:18 -msgid "The five most useful control nodes to build your games' interface" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:19 -msgid "How to work with the anchor of UI elements" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:20 -msgid "How to efficiently place and arrange your user interface using containers" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:22 -msgid "The five most common containers (you can learn more about containers in the :ref:`GUI Containers ` documentation page)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:25 -msgid "To learn how to control the interface and connect it to other scripts, read :ref:`Build your first game UI in Godot `." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:28 -msgid "To design your UI, you'll use the Control nodes. These are the nodes with green icons in the editor. There are dozens of them, for creating anything from life bars to complex applications. Godot's editor itself is built using Control nodes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:32 -msgid "Control nodes have unique properties that allow them to work well with one another. Other visual nodes, like Node2D and Sprite don't have these capabilities. So to make your life easier use Control nodes wherever possible when building your UIs." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:36 -msgid "All control nodes share the same main properties:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:38 -msgid "Anchor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:39 -msgid "Bounding rectangle" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:40 -msgid "Focus and focus neighbor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:41 -msgid "Size flags" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:42 -msgid "Margin" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:43 -msgid "The optional UI theme" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:45 -msgid "Once you understand the basics of the Control node, it will take you less time to learn all the nodes that derive from it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:50 -msgid "The 5 most common UI elements" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:52 -msgid "Godot ships with dozens of Control nodes. A lot of them are here to help you build editor plugins and applications." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:55 -msgid "For most games, you'll only need five types of UI elements, and a few Containers. These five Control nodes are:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:58 -msgid "Label: for displaying text" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:59 -msgid "TextureRect: used mostly for backgrounds, or everything that should be a static image" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:61 -msgid "TextureProgress: for lifebars, loading bars, horizontal, vertical or radial" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:63 -msgid "NinePatchRect: for scalable panels" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:64 -msgid "TextureButton: to create buttons" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:68 -msgid "The 5 most common Control nodes for UI design" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:71 -msgid "TextureRect" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:73 -msgid "**TextureRect** displays a texture or image inside a UI. It seems similar to the Sprite node, but it offers multiple scaling modes. Set the Stretch Mode property to change its behavior:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:77 -msgid "``Scale On Expand (compat)`` scales the texture to fit the node's bounding rectangle, only if ``expand`` property is ``true``; otherwise, it behaves like ``Keep`` mode. Default mode for backwards compatibility." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:80 -msgid "``Scale`` scales the texture to fit the node's bounding rectangle." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:81 -msgid "``Tile`` makes the texture repeat, but it won't scale." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:82 -msgid "``Keep`` and ``Keep Centered`` force the texture to remain at its original size, in the top left corner or the center of the frame respectively." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:85 -msgid "``Keep Aspect`` and ``Keep Aspect Centered`` scales the texture but force it to remain its original aspect ratio, in the top left corner or the center of the frame respectively." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:87 -msgid "``Keep Aspect Covered`` works just like ``Keep Aspect Centered`` but the shorter side fits the bounding rectangle and the other one clips to the node's limits." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:90 -msgid "As with Sprite nodes, you can modulate the TextureRect's color. Click the ``Modulate`` property and use the color picker." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:95 -msgid "TextureRect modulated with a red color" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:98 -msgid "TextureButton" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:100 -msgid "**TextureButton** is like TextureRect, except it has 6 texture slots: one for each of the button's states. Most of the time, you'll use the Normal, Pressed, and Hover textures. Focused is useful if your interface listens to the keyboard's input. The sixth image slot, the Click Mask, lets you define the clickable area using a 1-bit, pure black and white image." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:107 -msgid "In the Base Button section, you'll find a few checkboxes that change how the button behaves. When ``Toggle Mode`` is on, the button will toggle between active and normal states when you press it. ``Disabled`` makes it disabled by default, in which case it will use the ``Disabled`` texture. TextureButton shares a few properties with the texture frame: it has a ``modulate`` property, to change its color, and ``Resize`` and ``Stretch`` modes to change its scale behavior." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:117 -msgid "TextureButton and its 5 texture slots" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:120 -msgid "TextureProgress" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:122 -msgid "**TextureProgress** layers up to 3 sprites to create a progress bar. The Under and Over textures sandwich the Progress one, which displays the bar's value." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:126 -msgid "The ``Mode`` property controls the direction in which the bar grows: horizontally, vertically, or radially. If you set it to radial, the ``Initial Angle`` and ``Fill Degrees`` properties let you limit the range of the gauge." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:131 -msgid "To animate the bar, you'll want to look at the Range section. Set the ``Min`` and ``Max`` properties to define the range of the gauge. For instance, to represent a character's life, you'll want to set ``Min`` to ``0,`` and ``Max`` to the character's maximum life. Change the ``Value`` property to update the bar. If you leave the ``Min`` and ``Max`` values to the default of ``0`` and ``100,`` and set the ``Value`` property to ``40``, 40% of the ``Progress`` texture will show up, and 60% of it will stay hidden." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:141 -msgid "TextureProgress bar, two thirds filled" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:144 -msgid "Label" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:146 -msgid "**Label** prints text to the screen. You'll find all its properties in the Label section, in the Inspector. Write the text in the ``Text`` property, and check Autowrap if you want it to respect the textbox's size. If Autowrap is off, you won't be able to scale the node. You can align the text horizontally and vertically with Align and Valign, respectively." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:155 -msgid "Picture of a Label" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:158 -msgid "NinePatchRect" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:160 -msgid "**NinePatchRect** takes a texture split in 3 rows and 3 columns. The center and the sides tile when you scale the texture, but it never scales the corners. It is useful to build panels, dialog boxes and scalable backgrounds for your UI." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:167 -msgid "NinePatchRect scaled with the min\\_size property" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:170 -msgid "There are two workflows to build responsive UIs" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:172 -msgid "There are two workflows to build scalable and flexible interfaces in Godot:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:174 -msgid "**Place UI elements precisely with anchors:** Use the **Layout** menu to place and resize a UI element relative to its parent." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:175 -msgid "**Arrange control nodes automatically with containers:** Use container nodes to automatically scale and place UI elements." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:177 -msgid "The two approaches are not always compatible. Because a container controls its children, you cannot use the layout menu on them. Each container has a specific effect, so you may need to nest several of them to get a working interface. With the layout approach you work from the bottom up, on the children. As you don't insert extra containers in the scene it can make for cleaner hierarchies, but it's harder to arrange items in a row, column, grid, etc." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:179 -msgid "As you create UIs for your games and tools, you'll develop a sense for what fits best in each situation." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:183 -msgid "Place UI elements precisely with anchors" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:185 -msgid "Control nodes have a position and size, but they also have anchors and margins. Anchors define the origin, or the reference point, for the Left, Top, Right and Bottom edges of the node. Change any of the 4 anchors to change the reference point of the margins." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:192 -msgid "The anchor property" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:195 -msgid "How to change the anchor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:197 -msgid "Like any properties, you can edit the 4 anchor points in the Inspector, but this is not the most convenient way. When you select a control node, the layout menu appears above the viewport, in the toolbar. It gives you a list of icons to set all 4 anchors with a single click, instead of using the inspector's 4 properties. The layout menu will only show up when you select a control node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:206 -msgid "The layout menu in the viewport" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:209 -msgid "Anchors are relative to the parent container" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:211 -msgid "Each anchor is a value between 0 and 1. For the left and top anchors, a value of 0 means that without any margin, the node's edges will align with the left and top edges of its parent. For the right and bottom edges, a value of 1 means they'll align with the parent container's right and bottom edges. On the other hand, margins represent a distance to the anchor position in pixels, while anchors are relative to the parent container's size." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:221 -msgid "Margins are relative to the anchor position, which is relative to the anchors. In practice, you'll often let the container update margins for you" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:226 -msgid "Margins change with the anchor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:228 -msgid "Margins update automatically when you move or resize a control node. They represent the distance from the control node's edges to its anchor, which is relative to the parent control node or container. That's why your control nodes should always be inside a container, as we'll see in a moment. If there's no parent, the margins will be relative to the node's own bounding Rectangle, set in the Rect section, in the inspector." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:238 -msgid "Margins on a CenterContainer set to the \"Full Rect\" anchor" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:240 -msgid "Try to change the anchors or nest your Control nodes inside Containers: the margins will update. You'll rarely need to edit the margins manually. Always try to find a container to help you first; Godot comes with nodes to solve all the common cases for you. Need to add space between a lifebar and the border of the screen? Use the MarginContainer. Want to build a vertical menu? Use the VBoxContainer. More on these below." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:249 -msgid "Use size tags to change how UI elements fill the available space" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:251 -msgid "Every control node has Size Flags. They tell containers how the UI elements should scale. If you add the \"Fill\" flag to the Horizontal or Vertical property, the node's bounding box will take all the space it can, but it'll respect its siblings and retain its size. If there are 3 TextureRect nodes in an HBoxContainer, with the \"Fill\" flags on both axes, they'll each take up to a third of the available space, but no more. The container will take over the node and resize it automatically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:261 -msgid "3 UI elements in an HBoxContainer, they align horizontally" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:263 -msgid "The \"Expand\" flag lets the UI element take all the space it can, and push against its siblings. Its bounding rectangle will grow against the edges of its parent, or until it's blocked by another UI node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:269 -msgid "The same example as above, but the center node has the \"Expand\" size flag" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:272 -msgid "You'll need some practice to understand the size tags, as their effect can change quite a bit depending on how you set up your interface." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:276 -msgid "Arrange control nodes automatically with containers" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:278 -msgid "Containers automatically arrange all children Control nodes including other containers in rows, columns, and more. Use them to add padding around your interface or center nodes in their bounding rectangles. All built-in containers update in the editor, so you can see the effect instantly." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:284 -msgid "Containers have a few special properties to control how they arrange UI elements. To change them, navigate down to the Custom Constants section in the Inspector." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:289 -msgid "The 5 most useful containers" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:291 -msgid "If you build tools, you might need all of the containers. But for most games, a handful will be enough:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:294 -msgid "MarginContainer, to add margins around parts of the UI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:295 -msgid "CenterContainer, to center its children in its bounding box" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:296 -msgid "VboxContainer and HboxContainer, to arrange UI elements in rows or columns" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:298 -msgid "GridContainer, to arrange Controls nodes in a grid-like pattern" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:300 -msgid "CenterContainer centers all its children inside of its bounding rectangle. It's one you typically use for title screens, if you want the options to stay in the center of the viewport. As it centers everything, you'll often want a single container nested inside it. If you use textures and buttons instead, they'll stack up." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:308 -msgid "CenterContainer in action. The life bar centers inside its parent container." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:311 -msgid "The MarginContainer adds a margin on any side of the child nodes. Add a MarginContainer that encompasses the entire viewport to add a separation between the edge of the window and the UI. You can set a margin on the top, left, right, or bottom side of the container. No need to tick the checkbox: click the corresponding value box and type any number. It will activate automatically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:320 -msgid "The MarginContainer adds a 40px margin around the Game User Interface" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:322 -msgid "There are two BoxContainers: VBoxContainer and HBoxContainer. You cannot add the BoxContainer node itself, as it is a helper class, but you can use vertical and horizontal box containers. They arrange nodes either in rows or columns. Use them to line up items in a shop, or to build complex grids with rows and columns of different sizes, as you can nest them to your heart's content." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:331 -msgid "The HBoxContainer horizontally aligns UI elements" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:333 -msgid "VBoxContainer automatically arranges its children into a column. It puts them one after the other. If you use the separation parameter, it will leave a gap between its children. HBoxContainer arranges UI elements in a row. It's similar to the VBoxContainer, with an extra ``add_spacer`` method to add a spacer control node before its first child or after its last child, from a script." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:340 -msgid "The GridContainer lets you arrange UI elements in a grid-like pattern. You can only control the number of columns it has, and it will set the number of rows by itself, based on its children's count. If you have nine children and three columns, you will have 9÷3 = 3 rows. Add three more children and you'll have four rows. In other words, it will create new rows as you add more textures and buttons. Like the box containers, it has two properties to set the vertical and horizontal separation between the rows and columns respectively." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:351 -msgid "A GridContainer with 2 columns. It sizes each column automatically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_introduction_to_the_ui_system.rst:353 -msgid "Godot's UI system is complex, and has a lot more to offer. To learn how to design more advanced interfaces, head to the :ref:`GUI section ` of the docs." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/ui_main_menu.pot b/sphinx/templates/getting_started/step_by_step/ui_main_menu.pot deleted file mode 100644 index 5989cbbb3f..0000000000 --- a/sphinx/templates/getting_started/step_by_step/ui_main_menu.pot +++ /dev/null @@ -1,330 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:4 -msgid "Design a title screen" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:6 -msgid "In the next two tutorials, you will build two responsive UI (user interface) scenes step-by-step using the engine's UI system:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:9 -msgid "A main menu." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:10 -msgid "A game UI with a health bar, energy bar, bomb and money counters." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:12 -msgid "You will learn how to design game UIs efficiently, and how to use Godot's Control nodes. This page focuses on the visual part: everything you do from the editor. To learn how to code a life bar, read :doc:`ui_code_a_life_bar`." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:20 -msgid "The GUI you're going to create." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:22 -msgid "Download the project files: :download:`ui_main_menu_design.zip ` and extract the archive. Import the ``start/`` project in Godot to follow this tutorial. The ``end/`` folder contains the final result. You'll find all the sprites in the ``start/assets/main_menu`` folder." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:30 -msgid "Read the :doc:`ui_introduction_to_the_ui_system` first to learn how Godot's UI system works." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:34 -msgid "How to design your game UI" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:36 -msgid "To design a good UI, you want to come up with a rough mockup first: a plain drawing version that focuses on the placement of your UI components, their size, and user interaction. Pen and paper is all you need. You shouldn't use fancy and final graphics at this stage. Then, you only need simple placeholder sprites and you're good to jump into Godot. You want to make sure the players can find their way around the interface using those placeholders." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:46 -msgid "The UI's rough plan or mockup" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:48 -msgid "Placeholder doesn't have to mean ugly, but you should keep the graphics simple and clean. Avoid special effects, animation, and detailed illustration before you have players playtest your UI. Otherwise:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:52 -msgid "The graphics might skew the players' perception of the experience and you'll miss out on valuable feedback." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:54 -msgid "If the User Experience doesn't work, you'll have to redo some sprites." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:58 -msgid "Always try to make the interface work with simple text and boxes first. It's easy to replace the textures later. Professional UX designers often work with plain outlines and boxes in greyscale. When you take colors and fancy visuals away, it's a lot easier to size and place UI elements properly. It helps you refine the design foundation you'll build upon." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:65 -msgid "There are two ways to design your UI in Godot. You can:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:67 -msgid "Build it all in a single scene, and eventually save some branches as reusable scenes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:69 -msgid "Build template scenes for reusable components and create specific components that inherit from your base scenes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:72 -msgid "We will use the first approach, because the first version of your UI may not work as well as you'd like. You're likely to throw parts away and redesign components as you go. When you're sure everything works, it's easy to make some parts reusable, as you'll see below." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:79 -msgid "The files you'll find in Godot. The graphics look cleaner than on the rough design, but they're still placeholders." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:83 -msgid "Design the main menu" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:85 -msgid "Before we jump into the editor, we want to plan how we'll nest containers based on our mockup image." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:89 -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:292 -msgid "Break down the UI mockup" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:91 -msgid "Here are my three rules of thumb to find the right containers:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:93 -msgid "Break down the UI into nested boxes, from the largest that contains everything, to the smallest ones, that encompass one widget, like a bar with its label, a panel or a button." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:96 -msgid "If there's some padding around an area, use a ``MarginContainer``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:97 -msgid "If the elements are arranged in rows or columns, use an ``HBoxContainer`` or ``VBoxContainer``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:100 -msgid "These rules are enough to get us started, and work well for simple interfaces." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:103 -msgid "For the main menu, the largest box is the entire game window. There's padding between the edges of the window and the first components: this should be a ``MarginContainer``. Then, the screen is split into two columns, so we'll use an ``HBoxContainer``. In the left column, we'll manage the rows with a ``VBoxContainer``. And in the right column, we'll center the illustration with a ``CenterContainer``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:112 -msgid "Interface building blocks, broken down using the three rules of thumb." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:116 -msgid "Containers adapt to the window's resolution and width-to-height ratio. Although we could place UI elements by hand, containers are faster, more precise, and **responsive**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:121 -msgid "Prepare the Main Menu scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:125 -msgid "This tutorial is based on a window size of 1366×768. To change the project's base window size, open **Project > Project Settings** at the top of the editor then change **Display > Window > Size > Width** to ``1366`` and **Display > Window > Size > Height** to ``768``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:130 -msgid "If you forget to change the window size, anchors and containers may not behave as expected." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:133 -msgid "Let's create the main menu. We'll build it in a single scene. To create an empty scene, click on **Scene > New Scene**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:136 -msgid "We have to add a root node before we can save the scene. Your UI's root should be the outermost container or element. In this case it's a ``MarginContainer``. ``MarginContainer`` is a good starting point for most interfaces, as you often need padding around the UI. Press :kbd:`Ctrl + S` (:kbd:`Cmd + S` on macOS) to save the scene to the disk. Name it *MainMenu*." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:142 -msgid "Select the ``MarginContainer`` again, and head to the inspector to define the margins' size. Scroll down the ``Control`` class, to the ``Custom Constants`` section. Unfold it. Set the margins as such:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:146 -msgid "Margin Right: *120*" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:147 -msgid "Margin Top: *80*" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:148 -msgid "Margin Left: *120*" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:149 -msgid "Margin Bottom: *80*" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:151 -msgid "We want the container to fit the window. In the toolbar above the Viewport, open the **Layout** menu and select the last option, **Full Rect**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:155 -msgid "Add the UI sprites" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:157 -msgid "Select the ``MarginContainer``, and create the UI elements as ``TextureRect`` nodes. We need:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:160 -msgid "the title or logo," -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:161 -msgid "the three text options as individual nodes," -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:162 -msgid "the version note," -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:163 -msgid "and the main menu's illustration." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:165 -msgid "Click the **Add Node** button or press :kbd:`Ctrl + A` (:kbd:`Cmd + A` on macOS) on your keyboard. Start to type ``TextureRect`` to find the corresponding node and press enter. With the new node selected, press :kbd:`Ctrl + D` (:kbd:`Cmd + D` on macOS) five times to create five extra ``TextureRect`` instances." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:170 -msgid "Click each of the nodes to select it. In the inspector, find the **Texture** property and click **[empty] > Load**. A file browser opens and lets you pick a sprite to load into the texture slot." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:176 -msgid "The file browser lets you find and load textures." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:178 -msgid "Repeat the operation for all ``TextureRect`` nodes. You should have the logo, the illustration, the three menu options and the version note, each as a separate node. Then, double click on each of the nodes in the Scene tab to rename them. Nothing has been placed in containers yet so this should look messy." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:186 -msgid "The six nodes with textures loaded." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:190 -msgid "If you want to support localization in your game, use ``Labels`` for menu options instead of ``TextureRect``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:194 -msgid "Add containers to place UI elements automatically" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:196 -msgid "Our main menu has some margin around the edges of the screen. It is split in two parts: on the left, you have the logo and the menu options. On the right, you have the characters. We can use one of two containers to achieve this: ``HSplitContainer`` or ``HBoxContainer``. Split containers split the area into two: a left and a right side or a top and a bottom side. They also allow the user to resize the left and right areas using an interactive bar. On the other hand, ``HBoxContainer`` just splits itself into as many columns as it has children. Although you can deactivate the split container's resize behavior, it's recommended to favor box containers." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:207 -msgid "Select the ``MarginContainer`` and add an ``HBoxContainer``. Then, we need two containers as children of our ``HBoxContainer``: a ``VBoxContainer`` for the menu options on the left, and a ``CenterContainer`` for the illustration on the right." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:214 -msgid "You should have four nested containers and the TextureRect nodes sitting aside from it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:217 -msgid "In the node tree, select all the ``TextureRect`` nodes that should go on the left side: the logo, the menu options (Continue, NewGame, Options), and the version note. Drag and drop them into the ``VBoxContainer``. The nodes should position automatically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:224 -msgid "Containers automatically place and resize textures" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:226 -msgid "We're left with two problems to solve:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:228 -msgid "The characters on the right aren't centered." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:229 -msgid "There's no space between the logo and the other UI elements." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:231 -msgid "To center the characters on the right, first select the ``CenterContainer``. Then in the Inspector, scroll down to the **Size Flags** category and click on the field to the right of the **Vertical** property, and check **Expand** in addition to **Fill**. Do the same for the **Horizontal** property. This makes the ``CenterContainer`` expand into all available space while respecting its neighbour ``VBoxContainer``. Finally, drag and drop the Characters node into the ``CenterContainer``. The Characters element will center automatically." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:242 -msgid "The character node centers inside the right half of the screen as soon as you place it inside the CenterContainer." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:245 -msgid "To space out the menu options and the logo on the left, we'll use one final container and its size flags. Select the ``VBoxContainer`` and press :kbd:`Ctrl + A` (:kbd:`Cmd + A` on macOS) to add a new node inside it. Add a second ``VBoxContainer`` and name it *MenuOptions*. Select all three menu options, ``Continue``, ``NewGame`` and ``Options``, and drag and drop them inside the new ``VBoxContainer``. The UI's layout should barely change, if at all." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:255 -msgid "Place the new container between the other two nodes to retain the UI's layout." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:258 -msgid "Now we grouped the menu options together, we can tell their container to expand to take as much vertical space as possible. Select the ``MenuOptions`` node. In the Inspector, scroll down to the **Size Flags** category. Click on the field to the right of the **Vertical** property, and check **Expand** in addition to **Fill**. The container expands to take all the available vertical space while respecting its neighbors, the ``Logo`` and ``Version`` elements." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:266 -msgid "To center the nodes in the ``VBoxContainer``, scroll to the top of the Inspector and change the **Alignment** property to **Center**." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:271 -msgid "The menu options should center vertically in the UI's left column." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:273 -msgid "To wrap things up, let's add some separation between the menu options. Expand the **Custom Constants** category below **Size Flags**, and click the field next to the **Separation** parameter. Set it to 30. Once you press enter, the **Separation** property becomes active and Godot adds 30 pixels between menu options." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:281 -msgid "The final interface." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:283 -msgid "Without a single line of code, we have a precise and responsive main menu." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:286 -msgid "Congratulations for getting there! You can download the final menu :download:`ui_main_menu_design.zip ` to compare with your own. In the next tutorial, you'll create a Game User Interface with bars and item counters." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:294 -msgid "A responsive User Interface is all about making sure our UIs scale well on all screen types. TV screens and computer displays have different sizes and ratios. In Godot, we use containers to control the position and the size of UI elements." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:299 -msgid "The order in which you nest matters. To see if your UI adapts nicely to different screen ratios, select the root node, press :kbd:`Q` to activate the Select Mode, select the container and click and drag on one of the container's corners to resize it. The UI components should flow inside of it." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:305 -msgid "You'll notice that although containers move sprites around, they don't scale them. This is normal. We want the UI system to handle different screen ratios, but we also need the entire game to adapt to different screen resolutions. To do this, Godot scales the entire window up and down." -msgstr "" - -#: ../../docs/getting_started/step_by_step/ui_main_menu.rst:311 -msgid "You can change the scale mode in the project settings: click **Project > Project Settings** in the top menu. In the window's left column, look for the **Display** category. Click on the **Window** sub-category. On the right side of the window, you'll find a **Stretch** section. The three settings, **Mode**, **Aspect**, and **Shrink**, control the screen size. For more information, see :ref:`doc_multiple_resolutions`." -msgstr "" diff --git a/sphinx/templates/getting_started/step_by_step/your_first_game.pot b/sphinx/templates/getting_started/step_by_step/your_first_game.pot deleted file mode 100644 index 104d88327a..0000000000 --- a/sphinx/templates/getting_started/step_by_step/your_first_game.pot +++ /dev/null @@ -1,854 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:4 -msgid "Your first game" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:7 -msgid "Overview" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:9 -msgid "This tutorial will guide you through making your first Godot project. You will learn how the Godot editor works, how to structure a project, and how to build a 2D game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:13 -msgid "This project is an introduction to the Godot engine. It assumes that you have some programming experience already. If you're new to programming entirely, you should start here: :ref:`doc_scripting`. If you want to use C# in Godot, please also read :ref:`doc_c_sharp` before continuing." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:19 -msgid "The game is called \"Dodge the Creeps!\". Your character must move and avoid the enemies for as long as possible. Here is a preview of the final result:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:25 -msgid "**Why 2D?** 3D games are much more complex than 2D ones. You should stick to 2D until you have a good understanding of the game development process and how to use Godot." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:30 -msgid "Project setup" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:32 -msgid "Launch Godot and create a new project. Then, download :download:`dodge_assets.zip `. This contains the images and sounds you'll be using to make the game. Unzip these files in your project folder." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:37 -msgid "For this tutorial, we will assume you are familiar with the Godot editor. If you haven't read :ref:`doc_scenes_and_nodes`, do so now for an explanation of setting up a project and using the editor." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:41 -msgid "This game is designed for portrait mode, so we need to adjust the size of the game window. Click on Project -> Project Settings -> Display -> Window and set \"Width\" to ``480`` and \"Height\" to ``720``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:45 -msgid "Also in this section, under the \"Stretch\" options, set ``Mode`` to \"2d\" and ``Aspect`` to \"keep\". This ensures that the game scales consistently on different sized screens." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:50 -msgid "Organizing the project" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:52 -msgid "In this project, we will make 3 independent scenes: ``Player``, ``Mob``, and ``HUD``, which we will combine into the game's ``Main`` scene. In a larger project, it might be useful to create folders to hold the various scenes and their scripts, but for this relatively small game, you can save your scenes and scripts in the project's root folder, identified by ``res://``. You can see your project folders in the FileSystem Dock in the lower left corner:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:63 -msgid "Player scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:65 -msgid "The first scene will define the ``Player`` object. One of the benefits of creating a separate Player scene is that we can test it separately, even before we've created other parts of the game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:70 -msgid "Node structure" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:72 -msgid "To begin, we need to choose a root node for the player object. As a general rule, a scene's root node should reflect the object's desired functionality - what the object *is*. Click the \"Other Node\" button and add an :ref:`Area2D ` node to the scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:79 -msgid "Godot will display a warning icon next to the node in the scene tree. You can ignore it for now. We will address it later." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:82 -msgid "With ``Area2D`` we can detect objects that overlap or run into the player. Change the node's name to ``Player`` by double-clicking on it. Now that we've set the scene's root node, we can add additional nodes to give it more functionality." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:87 -msgid "Before we add any children to the ``Player`` node, we want to make sure we don't accidentally move or resize them by clicking on them. Select the node and click the icon to the right of the lock; its tooltip says \"Makes sure the object's children are not selectable.\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:94 -msgid "Save the scene. Click Scene -> Save, or press :kbd:`Ctrl + S` on Windows/Linux or :kbd:`Cmd + S` on macOS." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:96 -msgid "For this project, we will be following the Godot naming conventions." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:98 -msgid "**GDScript**: Classes (nodes) use PascalCase, variables and functions use snake_case, and constants use ALL_CAPS (See :ref:`doc_gdscript_styleguide`)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:102 -msgid "**C#**: Classes, export variables and methods use PascalCase, private fields use _camelCase, local variables and parameters use camelCase (See :ref:`doc_c_sharp_styleguide`). Be careful to type the method names precisely when connecting signals." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:109 -msgid "Sprite animation" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:111 -msgid "Click on the ``Player`` node and add an :ref:`AnimatedSprite ` node as a child. The ``AnimatedSprite`` will handle the appearance and animations for our player. Notice that there is a warning symbol next to the node. An ``AnimatedSprite`` requires a :ref:`SpriteFrames ` resource, which is a list of the animations it can display. To create one, find the ``Frames`` property in the Inspector and click \"[empty]\" -> \"New SpriteFrames\". Click again to open the \"SpriteFrames\" panel:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:122 -msgid "On the left is a list of animations. Click the \"default\" one and rename it to \"walk\". Then click the \"New Animation\" button to create a second animation named \"up\". Find the player images in the \"FileSystem\" tab - they're in the ``art`` folder you unzipped earlier. Drag the two images for each animation, named ``playerGrey_up[1/2]`` and ``playerGrey_walk[1/2]``, into the \"Animation Frames\" side of the panel for the corresponding animation:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:131 -msgid "The player images are a bit too large for the game window, so we need to scale them down. Click on the ``AnimatedSprite`` node and set the ``Scale`` property to ``(0.5, 0.5)``. You can find it in the Inspector under the ``Node2D`` heading." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:138 -msgid "Finally, add a :ref:`CollisionShape2D ` as a child of ``Player``. This will determine the player's \"hitbox\", or the bounds of its collision area. For this character, a ``CapsuleShape2D`` node gives the best fit, so next to \"Shape\" in the Inspector, click \"[empty]\"\" -> \"New CapsuleShape2D\". Using the two size handles, resize the shape to cover the sprite:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:147 -msgid "When you're finished, your ``Player`` scene should look like this:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:151 -msgid "Make sure to save the scene again after these changes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:154 -msgid "Moving the player" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:156 -msgid "Now we need to add some functionality that we can't get from a built-in node, so we'll add a script. Click the ``Player`` node and click the \"Attach Script\" button:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:162 -msgid "In the script settings window, you can leave the default settings alone. Just click \"Create\":" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:165 -msgid "If you're creating a C# script or other languages, select the language from the `language` drop down menu before hitting create." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:170 -msgid "Start by declaring the member variables this object will need:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:191 -msgid "Using the ``export`` keyword on the first variable ``speed`` allows us to set its value in the Inspector. This can be handy for values that you want to be able to adjust just like a node's built-in properties. Click on the ``Player`` node and you'll see the property now appears in the \"Script Variables\" section of the Inspector. Remember, if you change the value here, it will override the value written in the script." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:198 -msgid "If you're using C#, you need to (re)build the project assemblies whenever you want to see new export variables or signals. This build can be manually triggered by clicking the word \"Mono\" at the bottom of the editor window to reveal the Mono Panel, then clicking the \"Build Project\" button." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:206 -msgid "The ``_ready()`` function is called when a node enters the scene tree, which is a good time to find the size of the game window:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:222 -msgid "Now we can use the ``_process()`` function to define what the player will do. ``_process()`` is called every frame, so we'll use it to update elements of our game, which we expect will change often. For the player, we need to do the following:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:227 -msgid "Check for input." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:228 -msgid "Move in the given direction." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:229 -msgid "Play the appropriate animation." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:231 -msgid "First, we need to check for input - is the player pressing a key? For this game, we have 4 direction inputs to check. Input actions are defined in the Project Settings under \"Input Map\". Here, you can define custom events and assign different keys, mouse events, or other inputs to them. For this demo, we will use the default events that are assigned to the arrow keys on the keyboard." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:238 -msgid "You can detect whether a key is pressed using ``Input.is_action_pressed()``, which returns ``true`` if it's pressed or ``false`` if it isn't." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:300 -msgid "We start by setting the ``velocity`` to ``(0, 0)`` - by default, the player should not be moving. Then we check each input and add/subtract from the ``velocity`` to obtain a total direction. For example, if you hold ``right`` and ``down`` at the same time, the resulting ``velocity`` vector will be ``(1, 1)``. In this case, since we're adding a horizontal and a vertical movement, the player would move *faster* diagonally than if it just moved horizontally." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:307 -msgid "We can prevent that if we *normalize* the velocity, which means we set its *length* to ``1``, then multiply by the desired speed. This means no more fast diagonal movement." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:311 -msgid "If you've never used vector math before, or need a refresher, you can see an explanation of vector usage in Godot at :ref:`doc_vector_math`. It's good to know but won't be necessary for the rest of this tutorial." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:315 -msgid "We also check whether the player is moving so we can call ``play()`` or ``stop()`` on the AnimatedSprite." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:318 -msgid "``$`` is shorthand for ``get_node()``. So in the code above, ``$AnimatedSprite.play()`` is the same as ``get_node(\"AnimatedSprite\").play()``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:321 -msgid "In GDScript, ``$`` returns the node at the relative path from the current node, or returns ``null`` if the node is not found. Since AnimatedSprite is a child of the current node, we can use ``$AnimatedSprite``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:324 -msgid "Now that we have a movement direction, we can update the player's position. We can also use ``clamp()`` to prevent it from leaving the screen. *Clamping* a value means restricting it to a given range. Add the following to the bottom of the ``_process`` function (make sure it's not indented under the `else`):" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:345 -msgid "The `delta` parameter in the `_process()` function refers to the *frame length* - the amount of time that the previous frame took to complete. Using this value ensures that your movement will remain consistent even if the frame rate changes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:350 -msgid "Click \"Play Scene\" (``F6``) and confirm you can move the player around the screen in all directions." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:353 -msgid "If you get an error in the \"Debugger\" panel that says" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:355 -msgid "``Attempt to call function 'play' in base 'null instance' on a null instance``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:357 -msgid "this likely means you spelled the name of the AnimatedSprite node wrong. Node names are case-sensitive and ``$NodeName`` must match the name you see in the scene tree." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:362 -msgid "Choosing animations" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:364 -msgid "Now that the player can move, we need to change which animation the AnimatedSprite is playing based on its direction. We have the \"walk\" animation, which shows the player walking to the right. This animation should be flipped horizontally using the ``flip_h`` property for left movement. We also have the \"up\" animation, which should be flipped vertically with ``flip_v`` for downward movement. Let's place this code at the end of the ``_process()`` function:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:399 -msgid "The boolean assignments in the code above are a common shorthand for programmers. Since we're doing a comparison test (boolean) and also *assigning* a boolean value, we can do both at the same time. Consider this code versus the one-line boolean assignment above:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:423 -msgid "Play the scene again and check that the animations are correct in each of the directions." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:426 -msgid "A common mistake here is to type the names of the animations wrong. The animation names in the SpriteFrames panel must match what you type in the code. If you named the animation ``\"Walk\"``, you must also use a capital \"W\" in the code." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:431 -msgid "When you're sure the movement is working correctly, add this line to ``_ready()``, so the player will be hidden when the game starts:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:444 -msgid "Preparing for collisions" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:446 -msgid "We want ``Player`` to detect when it's hit by an enemy, but we haven't made any enemies yet! That's OK, because we're going to use Godot's *signal* functionality to make it work." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:450 -msgid "Add the following at the top of the script, after ``extends Area2D``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:464 -msgid "This defines a custom signal called \"hit\" that we will have our player emit (send out) when it collides with an enemy. We will use ``Area2D`` to detect the collision. Select the ``Player`` node and click the \"Node\" tab next to the Inspector tab to see the list of signals the player can emit:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:471 -msgid "Notice our custom \"hit\" signal is there as well! Since our enemies are going to be ``RigidBody2D`` nodes, we want the ``body_entered(body: Node)`` signal. This signal will be emitted when a body contacts the player. Click \"Connect..\" and the \"Connect a Signal\" window appears. We don't need to change any of these settings so click \"Connect\" again. Godot will automatically create a function in your player's script." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:480 -msgid "Note the green icon indicating that a signal is connected to this function. Add this code to the function:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:500 -msgid "Each time an enemy hits the player, the signal is going to be emitted. We need to disable the player's collision so that we don't trigger the ``hit`` signal more than once." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:504 -msgid "Disabling the area's collision shape can cause an error if it happens in the middle of the engine's collision processing. Using ``set_deferred()`` tells Godot to wait to disable the shape until it's safe to do so." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:508 -msgid "The last piece is to add a function we can call to reset the player when starting a new game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:529 -msgid "Enemy scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:531 -msgid "Now it's time to make the enemies our player will have to dodge. Their behavior will not be very complex: mobs will spawn randomly at the edges of the screen, choose a random direction, and move in a straight line." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:535 -msgid "We'll create a ``Mob`` scene, which we can then *instance* to create any number of independent mobs in the game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:538 -msgid "See :ref:`doc_instancing` to learn more about instancing." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:541 -msgid "Node setup" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:543 -msgid "Click Scene -> New Scene and add the following nodes:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:545 -msgid ":ref:`RigidBody2D ` (named ``Mob``)" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:547 -msgid ":ref:`AnimatedSprite `" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:548 -msgid ":ref:`CollisionShape2D `" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:549 -msgid ":ref:`VisibilityNotifier2D `" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:551 -msgid "Don't forget to set the children so they can't be selected, like you did with the Player scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:554 -msgid "In the :ref:`RigidBody2D ` properties, set ``Gravity Scale`` to ``0``, so the mob will not fall downward. In addition, under the ``PhysicsBody2D`` section, click the ``Mask`` property and uncheck the first box. This will ensure the mobs do not collide with each other." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:561 -msgid "Set up the :ref:`AnimatedSprite ` like you did for the player. This time, we have 3 animations: ``fly``, ``swim``, and ``walk``. There are two images for each animation in the art folder." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:565 -msgid "Adjust the \"Speed (FPS)\" to ``3`` for all animations." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:569 -msgid "Set the ``Playing`` property in the Inspector to “On”." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:571 -msgid "We'll select one of these animations randomly so that the mobs will have some variety." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:573 -msgid "Like the player images, these mob images need to be scaled down. Set the ``AnimatedSprite``'s ``Scale`` property to ``(0.75, 0.75)``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:576 -msgid "As in the ``Player`` scene, add a ``CapsuleShape2D`` for the collision. To align the shape with the image, you'll need to set the ``Rotation Degrees`` property to ``90`` (under \"Transform\" in the Inspector)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:580 -msgid "Save the scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:583 -msgid "Enemy script" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:585 -msgid "Add a script to the ``Mob`` and add the following member variables:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:609 -msgid "When we spawn a mob, we'll pick a random value between ``min_speed`` and ``max_speed`` for how fast each mob will move (it would be boring if they were all moving at the same speed)." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:613 -msgid "Now let's look at the rest of the script. In ``_ready()`` we randomly choose one of the three animation types:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:635 -msgid "First, we get the list of animation names from the AnimatedSprite's ``frames`` property. This returns an Array containing all three animation names: ``[\"walk\", \"swim\", \"fly\"]``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:639 -msgid "We then need to pick a random number between ``0`` and ``2`` to select one of these names from the list (array indices start at ``0``). ``randi() % n`` selects a random integer between ``0`` and ``n-1``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:643 -msgid "You must use ``randomize()`` if you want your sequence of \"random\" numbers to be different every time you run the scene. We're going to use ``randomize()`` in our ``Main`` scene, so we won't need it here." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:647 -msgid "The last piece is to make the mobs delete themselves when they leave the screen. Connect the ``screen_exited()`` signal of the ``VisibilityNotifier2D`` node and add this code:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:664 -msgid "This completes the `Mob` scene." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:667 -msgid "Main scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:669 -msgid "Now it's time to bring it all together. Create a new scene and add a :ref:`Node ` named ``Main``. Ensure you create a Node, **not** a Node2D. Click the \"Instance\" button and select your saved ``Player.tscn``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:676 -msgid "Now, add the following nodes as children of ``Main``, and name them as shown (values are in seconds):" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:679 -msgid ":ref:`Timer ` (named ``MobTimer``) - to control how often mobs spawn" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:680 -msgid ":ref:`Timer ` (named ``ScoreTimer``) - to increment the score every second" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:681 -msgid ":ref:`Timer ` (named ``StartTimer``) - to give a delay before starting" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:682 -msgid ":ref:`Position2D ` (named ``StartPosition``) - to indicate the player's start position" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:684 -msgid "Set the ``Wait Time`` property of each of the ``Timer`` nodes as follows:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:687 -msgid "``MobTimer``: ``0.5``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:688 -msgid "``ScoreTimer``: ``1``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:689 -msgid "``StartTimer``: ``2``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:691 -msgid "In addition, set the ``One Shot`` property of ``StartTimer`` to \"On\" and set ``Position`` of the ``StartPosition`` node to ``(240, 450)``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:695 -msgid "Spawning mobs" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:697 -msgid "The Main node will be spawning new mobs, and we want them to appear at a random location on the edge of the screen. Add a :ref:`Path2D ` node named ``MobPath`` as a child of ``Main``. When you select ``Path2D``, you will see some new buttons at the top of the editor:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:704 -msgid "Select the middle one (\"Add Point\") and draw the path by clicking to add the points at the corners shown. To have the points snap to the grid, make sure \"Use Grid Snap\" and \"Use Snap\" are both selected. These options can be found to the left of the \"Lock\" button, appearing as a magnet next to some dots and intersecting lines, respectively." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:712 -msgid "Draw the path in *clockwise* order, or your mobs will spawn pointing *outwards* instead of *inwards*!" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:717 -msgid "After placing point ``4`` in the image, click the \"Close Curve\" button and your curve will be complete." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:720 -msgid "Now that the path is defined, add a :ref:`PathFollow2D ` node as a child of ``MobPath`` and name it ``MobSpawnLocation``. This node will automatically rotate and follow the path as it moves, so we can use it to select a random position and direction along the path." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:725 -msgid "Your scene should look like this:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:730 -msgid "Main script" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:732 -msgid "Add a script to ``Main``. At the top of the script, we use ``export (PackedScene)`` to allow us to choose the Mob scene we want to instance." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:772 -msgid "Click the ``Main`` node and you will see the ``Mob`` property in the Inspector under \"Script Variables\"." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:775 -msgid "You can assign this property's value in two ways:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:777 -msgid "Drag ``Mob.tscn`` from the \"FileSystem\" panel and drop it in the ``Mob`` property ." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:779 -msgid "Click the down arrow next to \"[empty]\" and choose \"Load\". Select ``Mob.tscn``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:782 -msgid "Next, select the ``Player`` node in the Scene dock, and access the Node dock on the sidebar. Make sure to have the Signals tab selected in the Node dock." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:785 -msgid "You should see a list of the signals for the ``Player`` node. Find and double-click the ``hit`` signal in the list (or right-click it and select \"Connect...\"). This will open the signal connection dialog. We want to make a new function named ``game_over``, which will handle what needs to happen when a game ends. Type \"game_over\" in the \"Receiver Method\" box at the bottom of the signal connection dialog and click \"Connect\". Add the following code to the new function, as well as a ``new_game`` function that will set everything up for a new game:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:826 -msgid "Now connect the ``timeout()`` signal of each of the Timer nodes (``StartTimer``, ``ScoreTimer`` , and ``MobTimer``) to the main script. ``StartTimer`` will start the other two timers. ``ScoreTimer`` will increment the score by 1." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:853 -msgid "In ``_on_MobTimer_timeout()``, we will create a mob instance, pick a random starting location along the ``Path2D``, and set the mob in motion. The ``PathFollow2D`` node will automatically rotate as it follows the path, so we will use that to select the mob's direction as well as its position." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:859 -msgid "Note that a new instance must be added to the scene using ``add_child()``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:907 -msgid "Why ``PI``? In functions requiring angles, GDScript uses *radians*, not degrees. If you're more comfortable working with degrees, you'll need to use the ``deg2rad()`` and ``rad2deg()`` functions to convert between the two." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:913 -msgid "Testing the scene" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:915 -msgid "Let's test the scene to make sure everything is working. Add this to ``_ready()``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:932 -msgid "Let's also assign ``Main`` as our \"Main Scene\" - the one that runs automatically when the game launches. Press the \"Play\" button and select ``Main.tscn`` when prompted." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:936 -msgid "You should be able to move the player around, see mobs spawning, and see the player disappear when hit by a mob." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:939 -msgid "When you're sure everything is working, remove the call to ``new_game()`` from ``_ready()``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:943 -msgid "HUD" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:945 -msgid "The final piece our game needs is a UI: an interface to display things like score, a \"game over\" message, and a restart button. Create a new scene, and add a :ref:`CanvasLayer ` node named ``HUD``. \"HUD\" stands for \"heads-up display\", an informational display that appears as an overlay on top of the game view." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:951 -msgid "The :ref:`CanvasLayer ` node lets us draw our UI elements on a layer above the rest of the game, so that the information it displays isn't covered up by any game elements like the player or mobs." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:955 -msgid "The HUD needs to display the following information:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:957 -msgid "Score, changed by ``ScoreTimer``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:958 -msgid "A message, such as \"Game Over\" or \"Get Ready!\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:959 -msgid "A \"Start\" button to begin the game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:961 -msgid "The basic node for UI elements is :ref:`Control `. To create our UI, we'll use two types of :ref:`Control ` nodes: :ref:`Label ` and :ref:`Button `." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:965 -msgid "Create the following as children of the ``HUD`` node:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:967 -msgid ":ref:`Label ` named ``ScoreLabel``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:968 -msgid ":ref:`Label ` named ``Message``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:969 -msgid ":ref:`Button ` named ``StartButton``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:970 -msgid ":ref:`Timer ` named ``MessageTimer``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:972 -msgid "Click on the ``ScoreLabel`` and type a number into the ``Text`` field in the Inspector. The default font for ``Control`` nodes is small and doesn't scale well. There is a font file included in the game assets called \"Xolonium-Regular.ttf\". To use this font, do the following:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:977 -msgid "Under \"Custom Fonts\", choose \"New DynamicFont\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:981 -msgid "Click on the \"DynamicFont\" you added, and under \"Font/Font Data\", choose \"Load\" and select the \"Xolonium-Regular.ttf\" file. You must also set the font's ``Size``. A setting of ``64`` works well." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:987 -msgid "Once you've done this on the ``ScoreLabel``, you can click the down arrow next to the DynamicFont property and choose \"Copy\", then \"Paste\" it in the same place on the other two Control nodes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:991 -msgid "**Anchors and Margins:** ``Control`` nodes have a position and size, but they also have anchors and margins. Anchors define the origin - the reference point for the edges of the node. Margins update automatically when you move or resize a control node. They represent the distance from the control node's edges to its anchor. See :ref:`doc_design_interfaces_with_the_control_nodes` for more details." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:998 -msgid "Arrange the nodes as shown below. Click the \"Layout\" button to set a Control node's layout:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1003 -msgid "You can drag the nodes to place them manually, or for more precise placement, use the following settings:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1007 -msgid "ScoreLabel" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1009 -msgid "*Layout* : \"Top Wide\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1010 -msgid "*Text* : ``0``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1011 -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1018 -msgid "*Align* : \"Center\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1014 -msgid "Message" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1016 -msgid "*Layout* : \"HCenter Wide\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1017 -msgid "*Text* : ``Dodge the Creeps!``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1019 -msgid "*Autowrap* : \"On\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1022 -msgid "StartButton" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1024 -msgid "*Text* : ``Start``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1025 -msgid "*Layout* : \"Center Bottom\"" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1026 -msgid "*Margin* :" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1028 -msgid "Top: ``-200``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1029 -msgid "Bottom: ``-100``" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1031 -msgid "On the ``MessageTimer``, set the ``Wait Time`` to ``2`` and set the ``One Shot`` property to \"On\"." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1034 -msgid "Now add this script to ``HUD``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1053 -msgid "The ``start_game`` signal tells the ``Main`` node that the button has been pressed." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1075 -msgid "This function is called when we want to display a message temporarily, such as \"Get Ready\"." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1109 -msgid "This function is called when the player loses. It will show \"Game Over\" for 2 seconds, then return to the title screen and, after a brief pause, show the \"Start\" button." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1113 -msgid "When you need to pause for a brief time, an alternative to using a Timer node is to use the SceneTree's ``create_timer()`` function. This can be very useful to add delays such as in the above code, where we want to wait some time before showing the \"Start\" button." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1131 -msgid "This function is called by ``Main`` whenever the score changes." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1133 -msgid "Connect the ``timeout()`` signal of ``MessageTimer`` and the ``pressed()`` signal of ``StartButton`` and add the following code to the new functions:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1161 -msgid "Connecting HUD to Main" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1163 -msgid "Now that we're done creating the ``HUD`` scene, go back to ``Main``. Instance the ``HUD`` scene in ``Main`` like you did the ``Player`` scene. The scene tree should look like this, so make sure you didn't miss anything:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1169 -msgid "Now we need to connect the ``HUD`` functionality to our ``Main`` script. This requires a few additions to the ``Main`` scene:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1172 -msgid "In the Node tab, connect the HUD's ``start_game`` signal to the ``new_game()`` function of the Main node by typing \"new_game\" in the \"Receiver Method\" in the \"Connect a Signal\" window. Verify that the green connection icon now appears next to ``func new_game()`` in the script." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1177 -msgid "In ``new_game()``, update the score display and show the \"Get Ready\" message:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1192 -msgid "In ``game_over()`` we need to call the corresponding ``HUD`` function:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1203 -msgid "Finally, add this to ``_on_ScoreTimer_timeout()`` to keep the display in sync with the changing score:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1215 -msgid "Now you're ready to play! Click the \"Play the Project\" button. You will be asked to select a main scene, so choose ``Main.tscn``." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1219 -msgid "Removing old creeps" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1221 -msgid "If you play until \"Game Over\" and then start a new game right away, the creeps from the previous game may still be on the screen. It would be better if they all disappeared at the start of a new game. We just need a way to tell *all* the mobs to remove themselves. We can do this with the \"group\" feature." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1226 -msgid "In the ``Mob`` scene, select the root node and click the \"Node\" tab next to the Inspector (the same place where you find the node's signals). Next to \"Signals\", click \"Groups\" and you can type a new group name and click \"Add\"." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1232 -msgid "Now all mobs will be in the \"mobs\" group. We can then add the following line to the ``game_over()`` function in ``Main``:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1245 -msgid "The ``call_group()`` function calls the named function on every node in a group - in this case we are telling every mob to delete itself." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1249 -msgid "Finishing up" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1251 -msgid "We have now completed all the functionality for our game. Below are some remaining steps to add a bit more \"juice\" to improve the game experience. Feel free to expand the gameplay with your own ideas." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1256 -msgid "Background" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1258 -msgid "The default gray background is not very appealing, so let's change its color. One way to do this is to use a :ref:`ColorRect ` node. Make it the first node under ``Main`` so that it will be drawn behind the other nodes. ``ColorRect`` only has one property: ``Color``. Choose a color you like and select \"Layout\" -> \"Full Rect\" so that it covers the screen." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1264 -msgid "You could also add a background image, if you have one, by using a ``TextureRect`` node instead." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1268 -msgid "Sound effects" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1270 -msgid "Sound and music can be the single most effective way to add appeal to the game experience. In your game assets folder, you have two sound files: \"House In a Forest Loop.ogg\" for background music, and \"gameover.wav\" for when the player loses." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1275 -msgid "Add two :ref:`AudioStreamPlayer ` nodes as children of ``Main``. Name one of them ``Music`` and the other ``DeathSound``. On each one, click on the ``Stream`` property, select \"Load\", and choose the corresponding audio file." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1280 -msgid "To play the music, add ``$Music.play()`` in the ``new_game()`` function and ``$Music.stop()`` in the ``game_over()`` function." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1283 -msgid "Finally, add ``$DeathSound.play()`` in the ``game_over()`` function." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1286 -msgid "Keyboard shortcut" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1288 -msgid "Since the game is played with keyboard controls, it would be convenient if we could also start the game by pressing a key on the keyboard. We can do this with the \"Shortcut\" property of the ``Button`` node." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1292 -msgid "In the ``HUD`` scene, select the ``StartButton`` and find its *Shortcut* property in the Inspector. Select \"New Shortcut\" and click on the \"Shortcut\" item. A second *Shortcut* property will appear. Select \"New InputEventAction\" and click the new \"InputEventAction\". Finally, in the *Action* property, type the name ``ui_select``. This is the default input event associated with the spacebar." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1300 -msgid "Now when the start button appears, you can either click it or press :kbd:`Space` to start the game." -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1304 -msgid "Project files" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1309 -msgid "You can find a completed version of this project at these locations:" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1307 -msgid "https://github.com/kidscancode/Godot3_dodge/releases" -msgstr "" - -#: ../../docs/getting_started/step_by_step/your_first_game.rst:1308 -msgid "https://github.com/godotengine/godot-demo-projects" -msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/index.pot b/sphinx/templates/getting_started/workflow/assets/index.pot deleted file mode 100644 index fc6119eef7..0000000000 --- a/sphinx/templates/getting_started/workflow/assets/index.pot +++ /dev/null @@ -1,21 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/workflow/assets/index.rst:2 -msgid "Assets workflow" -msgstr "" diff --git a/sphinx/templates/getting_started/workflow/export/feature_tags.pot b/sphinx/templates/getting_started/workflow/export/feature_tags.pot deleted file mode 100644 index a13247879d..0000000000 --- a/sphinx/templates/getting_started/workflow/export/feature_tags.pot +++ /dev/null @@ -1,329 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:4 -msgid "Feature tags" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:7 -msgid "Introduction" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:9 -msgid "Godot has a special system to tag availability of features. Each *feature* is represented as a string, which can refer to many of the following:" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:12 -msgid "Platform name." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:13 -msgid "Platform architecture (64-bit or 32-bit, x86 or ARM)." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:14 -msgid "Platform type (desktop, mobile, Web)." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:15 -msgid "Supported texture compression algorithms on the platform." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:16 -msgid "Whether a build is ``debug`` or ``release`` (``debug`` includes the editor)." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:17 -msgid "Whether the project is running from the editor or a \"standalone\" binary." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:18 -msgid "Many more things." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:20 -msgid "Features can be queried at run-time from the singleton API by calling:" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:28 -msgid "Default features" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:30 -msgid "Here is a list of most feature tags in Godot. Keep in mind they are **case-sensitive**:" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:33 -msgid "**Feature tag**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:33 -msgid "**Description**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:35 -msgid "**Android**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:35 -msgid "Running on Android" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:37 -msgid "**HTML5**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:37 -msgid "Running on HTML5" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:39 -msgid "**JavaScript**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:39 -msgid ":ref:`JavaScript singleton ` is available" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:42 -msgid "**OSX**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:42 -msgid "Running on macOS" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:44 -msgid "**iOS**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:44 -msgid "Running on iOS" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:46 -msgid "**UWP**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:46 -msgid "Running on UWP" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:48 -msgid "**Windows**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:48 -msgid "Running on Windows" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:50 -msgid "**X11**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:50 -msgid "Running on X11 (Linux/BSD desktop)" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:52 -msgid "**Server**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:52 -msgid "Running on the headless server platform" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:54 -msgid "**debug**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:54 -msgid "Running on a debug build (including the editor)" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:56 -msgid "**release**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:56 -msgid "Running on a release build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:58 -msgid "**editor**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:58 -msgid "Running on an editor build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:60 -msgid "**standalone**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:60 -msgid "Running on a non-editor build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:62 -msgid "**64**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:62 -msgid "Running on a 64-bit build (any architecture)" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:64 -msgid "**32**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:64 -msgid "Running on a 32-bit build (any architecture)" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:66 -msgid "**x86_64**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:66 -msgid "Running on a 64-bit x86 build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:68 -msgid "**x86**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:68 -msgid "Running on a 32-bit x86 build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:70 -msgid "**arm64**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:70 -msgid "Running on a 64-bit ARM build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:72 -msgid "**arm**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:72 -msgid "Running on a 32-bit ARM build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:74 -msgid "**mobile**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:74 -msgid "Host OS is a mobile platform" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:76 -msgid "**pc**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:76 -msgid "Host OS is a PC platform (desktop/laptop)" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:78 -msgid "**web**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:78 -msgid "Host OS is a Web browser" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:80 -msgid "**etc**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:80 -msgid "Textures using ETC1 compression are supported" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:82 -msgid "**etc2**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:82 -msgid "Textures using ETC2 compression are supported" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:84 -msgid "**s3tc**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:84 -msgid "Textures using S3TC (DXT/BC) compression are supported" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:86 -msgid "**pvrtc**" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:86 -msgid "Textures using PVRTC compression are supported" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:90 -msgid "Custom features" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:92 -msgid "It is possible to add custom features to a build; use the relevant field in the *export preset* used to generate it:" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:98 -msgid "Overriding project settings" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:100 -msgid "Features can be used to override specific configuration values in the *Project Settings*. This allows you to better customize any configuration when doing a build." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:103 -msgid "In the following example, a different icon is added for the demo build of the game (which was customized in a special export preset, which, in turn, includes only demo levels)." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:108 -msgid "After overriding, a new field is added for this specific configuration:" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:114 -msgid "When using the :ref:`project settings \"override.cfg\" functionality ` (which is unrelated to feature tags), remember that feature tags still apply. Therefore, make sure to *also* override the setting with the desired feature tag(s) if you want them to override base project settings on all platforms and configurations." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:122 -msgid "Default overrides" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:124 -msgid "There are already a lot of settings that come with overrides by default; they can be found in many sections of the project settings." -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:130 -msgid "Customizing the build" -msgstr "" - -#: ../../docs/getting_started/workflow/export/feature_tags.rst:132 -msgid "Feature tags can be used to customize a build process too, by writing a custom **ExportPlugin**. They are also used to specify which shared library is loaded and exported in **GDNative**." -msgstr "" diff --git a/sphinx/templates/getting_started/workflow/index.pot b/sphinx/templates/getting_started/workflow/index.pot deleted file mode 100644 index c39fc010a1..0000000000 --- a/sphinx/templates/getting_started/workflow/index.pot +++ /dev/null @@ -1,21 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/workflow/index.rst:2 -msgid "Project workflow" -msgstr "" diff --git a/sphinx/templates/getting_started/workflow/project_setup/index.pot b/sphinx/templates/getting_started/workflow/project_setup/index.pot deleted file mode 100644 index 456e90ff8e..0000000000 --- a/sphinx/templates/getting_started/workflow/project_setup/index.pot +++ /dev/null @@ -1,21 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/getting_started/workflow/project_setup/index.rst:2 -msgid "Project setup" -msgstr "" diff --git a/sphinx/templates/index.pot b/sphinx/templates/index.pot index 62d4644334..371d69ce97 100644 --- a/sphinx/templates/index.pot +++ b/sphinx/templates/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,8 +26,8 @@ msgstr "" msgid "Getting started" msgstr "" -#: ../../docs/index.rst:84 -#: ../../docs/index.rst:84 +#: ../../docs/index.rst:85 +#: ../../docs/index.rst:85 msgid "Tutorials" msgstr "" @@ -41,8 +41,8 @@ msgstr "" msgid "Community" msgstr "" -#: ../../docs/index.rst:136 -#: ../../docs/index.rst:136 +#: ../../docs/index.rst:137 +#: ../../docs/index.rst:137 msgid "Class reference" msgstr "" diff --git a/sphinx/templates/tutorials/2d/2d_lights_and_shadows.pot b/sphinx/templates/tutorials/2d/2d_lights_and_shadows.pot index 77fe135b0a..06bb5ab920 100644 --- a/sphinx/templates/tutorials/2d/2d_lights_and_shadows.pot +++ b/sphinx/templates/tutorials/2d/2d_lights_and_shadows.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/2d_meshes.pot b/sphinx/templates/tutorials/2d/2d_meshes.pot index 4a3b09c3b6..d10d763d2b 100644 --- a/sphinx/templates/tutorials/2d/2d_meshes.pot +++ b/sphinx/templates/tutorials/2d/2d_meshes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/2d_movement.pot b/sphinx/templates/tutorials/2d/2d_movement.pot index d9d6e1e006..dfb00946f6 100644 --- a/sphinx/templates/tutorials/2d/2d_movement.pot +++ b/sphinx/templates/tutorials/2d/2d_movement.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/2d_sprite_animation.pot b/sphinx/templates/tutorials/2d/2d_sprite_animation.pot index 3c590c25cb..c6b9e1feb3 100644 --- a/sphinx/templates/tutorials/2d/2d_sprite_animation.pot +++ b/sphinx/templates/tutorials/2d/2d_sprite_animation.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/2d_transforms.pot b/sphinx/templates/tutorials/2d/2d_transforms.pot index 4ad8afb94a..a0778aa0a4 100644 --- a/sphinx/templates/tutorials/2d/2d_transforms.pot +++ b/sphinx/templates/tutorials/2d/2d_transforms.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/canvas_layers.pot b/sphinx/templates/tutorials/2d/canvas_layers.pot index d2955e4024..12d54b7ca2 100644 --- a/sphinx/templates/tutorials/2d/canvas_layers.pot +++ b/sphinx/templates/tutorials/2d/canvas_layers.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -24,62 +24,66 @@ msgstr "" msgid "Viewport and Canvas items" msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:9 -msgid "Regular 2D nodes, such as :ref:`Node2D ` or :ref:`Control ` both inherit from :ref:`CanvasItem `, which is the base for all 2D nodes. CanvasItems can be arranged in trees. Each item will inherit its parent's transform. This means that when the parent is moved, the children will move too." +#: ../../docs/tutorials/2d/canvas_layers.rst:13 +msgid ":ref:`CanvasItem ` is the base for all 2D nodes, be it regular" msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:16 -msgid "CanvasItem nodes, and nodes inheriting from them, are direct or indirect children of a :ref:`Viewport `, and will be displayed through it." +#: ../../docs/tutorials/2d/canvas_layers.rst:10 +msgid "2D nodes, such as :ref:`Node2D `, or `Control `. Both inherit from :ref:`CanvasItem `. You can arrange canvas items in trees. Each item will inherit its parent's transform: when the parent moves, its children move too." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:19 -msgid "A Viewport has the property :ref:`Viewport.canvas_transform `, which allows applying a custom :ref:`Transform2D ` transform to the CanvasItem hierarchy it contains. Nodes such as :ref:`Camera2D ` work by changing that transform." +#: ../../docs/tutorials/2d/canvas_layers.rst:15 +msgid "CanvasItem nodes, and nodes inheriting from them, are direct or indirect children of a :ref:`Viewport `, that display them." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:25 -msgid "Effects like scrolling are best achieved by manipulating the canvas transform property. This approach is more efficient than moving the root canvas item (and hence the whole scene)." +#: ../../docs/tutorials/2d/canvas_layers.rst:18 +msgid "A Viewport has the property :ref:`Viewport.canvas_transform `, allows to apply a custom :ref:`Transform2D ` transform to the CanvasItem hierarchy it contains. Nodes such as :ref:`Camera2D ` work by changing that transform." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:28 +#: ../../docs/tutorials/2d/canvas_layers.rst:24 +msgid "To achieve effects like scrolling, manipulating the canvas transform property is more efficient than moving the root canvas item and the entire scene with it." +msgstr "" + +#: ../../docs/tutorials/2d/canvas_layers.rst:27 msgid "Usually though, we don't want *everything* in the game or app to be subject to the canvas transform. For example:" msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:31 +#: ../../docs/tutorials/2d/canvas_layers.rst:30 msgid "**Parallax Backgrounds**: Backgrounds that move slower than the rest of the stage." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:33 -msgid "**UI**: Think of a user interface (UI) or head-up display (HUD) superimposed on our view of the game world. We want a life counter, score display and other elements to retain their screen positions even when our view of the game world changes." +#: ../../docs/tutorials/2d/canvas_layers.rst:32 +msgid "**UI**: Think of a user interface (UI) or Heads-up display (HUD) superimposed on our view of the game world. We want a life counter, score display and other elements to retain their screen positions even when our view of the game world changes." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:34 +#: ../../docs/tutorials/2d/canvas_layers.rst:33 msgid "**Transitions**: We may want visual effects used for transitions (fades, blends) to remain at a fixed screen location." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:36 +#: ../../docs/tutorials/2d/canvas_layers.rst:35 msgid "How can these problems be solved in a single scene tree?" msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:39 +#: ../../docs/tutorials/2d/canvas_layers.rst:38 msgid "CanvasLayers" msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:41 +#: ../../docs/tutorials/2d/canvas_layers.rst:40 msgid "The answer is :ref:`CanvasLayer `, which is a node that adds a separate 2D rendering layer for all its children and grand-children. Viewport children will draw by default at layer \"0\", while a CanvasLayer will draw at any numeric layer. Layers with a greater number will be drawn above those with a smaller number. CanvasLayers also have their own transform and do not depend on the transform of other layers. This allows the UI to be fixed in screen-space while our view on the game world changes." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:50 +#: ../../docs/tutorials/2d/canvas_layers.rst:49 msgid "An example of this is creating a parallax background. This can be done with a CanvasLayer at layer \"-1\". The screen with the points, life counter and pause button can also be created at layer \"1\"." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:54 +#: ../../docs/tutorials/2d/canvas_layers.rst:53 msgid "Here's a diagram of how it looks:" msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:58 +#: ../../docs/tutorials/2d/canvas_layers.rst:57 msgid "CanvasLayers are independent of tree order, and they only depend on their layer number, so they can be instantiated when needed." msgstr "" -#: ../../docs/tutorials/2d/canvas_layers.rst:61 +#: ../../docs/tutorials/2d/canvas_layers.rst:60 msgid "CanvasLayers aren't necessary to control the drawing order of nodes. The standard way to ensuring that a node is correctly drawn 'in front' or 'behind' others is to manipulate the order of the nodes in the scene panel. Perhaps counterintuitively, the topmost nodes in the scene panel are drawn on *behind* lower ones in the viewport. 2d nodes also have a property for controlling their drawing order (see :ref:`Node2D.z_index `)." msgstr "" diff --git a/sphinx/templates/tutorials/2d/custom_drawing_in_2d.pot b/sphinx/templates/tutorials/2d/custom_drawing_in_2d.pot index 8aea99afea..5e85f81628 100644 --- a/sphinx/templates/tutorials/2d/custom_drawing_in_2d.pot +++ b/sphinx/templates/tutorials/2d/custom_drawing_in_2d.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/index.pot b/sphinx/templates/tutorials/2d/index.pot index 554fd741c4..623e79b040 100644 --- a/sphinx/templates/tutorials/2d/index.pot +++ b/sphinx/templates/tutorials/2d/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/particle_systems_2d.pot b/sphinx/templates/tutorials/2d/particle_systems_2d.pot index c2cb8743d3..e6dc7f7ad1 100644 --- a/sphinx/templates/tutorials/2d/particle_systems_2d.pot +++ b/sphinx/templates/tutorials/2d/particle_systems_2d.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/2d/using_tilemaps.pot b/sphinx/templates/tutorials/2d/using_tilemaps.pot index 984de8a499..1393d6178c 100644 --- a/sphinx/templates/tutorials/2d/using_tilemaps.pot +++ b/sphinx/templates/tutorials/2d/using_tilemaps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/3d_rendering_limitations.pot b/sphinx/templates/tutorials/3d/3d_rendering_limitations.pot index 1eda4708c1..4715914d48 100644 --- a/sphinx/templates/tutorials/3d/3d_rendering_limitations.pot +++ b/sphinx/templates/tutorials/3d/3d_rendering_limitations.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/baked_lightmaps.pot b/sphinx/templates/tutorials/3d/baked_lightmaps.pot index c60d98eb58..14988efdbb 100644 --- a/sphinx/templates/tutorials/3d/baked_lightmaps.pot +++ b/sphinx/templates/tutorials/3d/baked_lightmaps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/csg_tools.pot b/sphinx/templates/tutorials/3d/csg_tools.pot index 1b91ba0136..cfaf4cf803 100644 --- a/sphinx/templates/tutorials/3d/csg_tools.pot +++ b/sphinx/templates/tutorials/3d/csg_tools.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/environment_and_post_processing.pot b/sphinx/templates/tutorials/3d/environment_and_post_processing.pot index af677cd638..ed734fd9e5 100644 --- a/sphinx/templates/tutorials/3d/environment_and_post_processing.pot +++ b/sphinx/templates/tutorials/3d/environment_and_post_processing.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/fps_tutorial/index.pot b/sphinx/templates/tutorials/3d/fps_tutorial/index.pot deleted file mode 100644 index 1ffe615c32..0000000000 --- a/sphinx/templates/tutorials/3d/fps_tutorial/index.pot +++ /dev/null @@ -1,21 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/3d/fps_tutorial/index.rst:2 -msgid "FPS tutorial" -msgstr "" diff --git a/sphinx/templates/tutorials/3d/fps_tutorial/part_five.pot b/sphinx/templates/tutorials/3d/fps_tutorial/part_five.pot deleted file mode 100644 index eef9a950ae..0000000000 --- a/sphinx/templates/tutorials/3d/fps_tutorial/part_five.pot +++ /dev/null @@ -1,837 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:4 -msgid "Part 5" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:7 -msgid "Part overview" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:9 -msgid "In this part, we're going to add grenades to the player, give the player the ability to grab and throw objects, and add turrets!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:13 -msgid "You are assumed to have finished :ref:`doc_fps_tutorial_part_four` before moving on to this part of the tutorial. The finished project from :ref:`doc_fps_tutorial_part_four` will be the starting project for part 5" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:16 -msgid "Let's get started!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:19 -msgid "Adding grenades" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:21 -msgid "Firstly, let's give the player some grenades to play with. Open up ``Grenade.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:23 -msgid "There are a few things to note here, the first and foremost being that the grenades are going to use :ref:`RigidBody ` nodes. We're going to use :ref:`RigidBody ` nodes for our grenades so they bounce around the world in a (somewhat) realistic manner." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:26 -msgid "The second thing to note is ``Blast_Area``. This is an :ref:`Area ` node that will represent the blast radius of the grenade." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:28 -msgid "Finally, the last thing to note is ``Explosion``. This is the :ref:`Particles ` node that will emit an explosion effect when the grenade explodes. One thing to note here is that we have ``One shot`` enabled. This is so we emit all the particles at once. The particles are also emitted using world coordinates instead of local coordinates, so we have ``Local Coords`` unchecked as well." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:32 -msgid "If you want, you can see how the particles are set up by looking through the particle's ``Process Material`` and ``Draw Passes``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:34 -msgid "Let's write the code needed for the grenade. Select ``Grenade`` and make a new script called ``Grenade.gd``. Add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:90 -msgid "Let's go over what's happening, starting with the class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:92 -msgid "``GRENADE_DAMAGE``: The amount of damage the grenade causes when it explodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:93 -msgid "``GRENADE_TIME``: The amount of time the grenade takes (in seconds) to explode once it's created/thrown." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:94 -msgid "``grenade_timer``: A variable for tracking how long the grenade has been created/thrown." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:95 -msgid "``EXPLOSION_WAIT_TIME``: The amount of time needed (in seconds) to wait before we destroy the grenade scene after the explosion" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:96 -msgid "``explosion_wait_timer``: A variable for tracking how much time has passed since the grenade exploded." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:97 -msgid "``rigid_shape``: The :ref:`CollisionShape ` for the grenade's :ref:`RigidBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:98 -msgid "``grenade_mesh``: The :ref:`MeshInstance ` for the grenade." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:99 -msgid "``blast_area``: The blast :ref:`Area ` used to damage things when the grenade explodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:100 -msgid "``explosion_particles``: The :ref:`Particles ` that come out when the grenade explodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:102 -msgid "Notice how ``EXPLOSION_WAIT_TIME`` is a rather strange number (``0.48``). This is because we want ``EXPLOSION_WAIT_TIME`` to be equal to the length of time the explosion particles are emitting, so when the particles are done we destroy/free the grenade. We calculate ``EXPLOSION_WAIT_TIME`` by taking the particle's life time and dividing it by the particle's speed scale. This gets us the exact time the explosion particles will last." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:108 -msgid "Now let's turn our attention to ``_ready``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:110 -msgid "First we get all the nodes we'll need and assign them to the proper class variables." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:112 -msgid "We need to get the :ref:`CollisionShape ` and :ref:`MeshInstance ` because similarly to the target in :ref:`doc_fps_tutorial_part_four`, we will be hiding the grenade's mesh and disabling the collision shape when the grenade explodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:115 -msgid "The reason we need to get the blast :ref:`Area ` is so we can damage everything inside it when the grenade explodes. We'll be using code similar to the knife code in the player. We need the :ref:`Particles ` so we can emit particles when the grenade explodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:118 -msgid "After we get all the nodes and assign them to their class variables, we then make sure the explosion particles are not emitting, and that they are set to emit in one shot. This is to be extra sure the particles will behave the way we expect them to." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:123 -msgid "Now let's look at ``_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:125 -msgid "Firstly, we check to see if the ``grenade_timer`` is less than ``GRENADE_TIME``. If it is, we add ``delta`` and return. This is so the grenade has to wait ``GRENADE_TIME`` seconds before exploding, allowing the :ref:`RigidBody ` to move around." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:128 -msgid "If ``grenade_timer`` is at ``GRENADE_TIMER`` or higher, we then need to check if the grenade has waited long enough and needs to explode. We do this by checking to see if ``explosion_wait_timer`` is equal to ``0`` or less. Since we will be adding ``delta`` to ``explosion_wait_timer`` right after, whatever code under the check will only be called once, right when the grenade has waited long enough and needs to explode." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:132 -msgid "If the grenade has waited long enough to explode, we first tell the ``explosion_particles`` to emit. Then we make ``grenade_mesh`` invisible, and disable ``rigid_shape``, effectively hiding the grenade." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:135 -msgid "We then set the :ref:`RigidBody `'s mode to ``MODE_STATIC`` so the grenade does not move." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:137 -msgid "Then we get all the bodies in ``blast_area``, check to see if they have the ``bullet_hit`` method/function, and if they do, we call it and pass in ``GRENADE_DAMAGE`` and the transform from the body looking at the grenade. This makes it where the bodies exploded by the grenade will explode outwards from the grenade's position." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:140 -msgid "We then check to see if ``explosion_wait_timer`` is less than ``EXPLOSION_WAIT_TIME``. If it is, we add ``delta`` to ``explosion_wait_timer``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:142 -msgid "Next, we check to see if ``explosion_wait_timer`` is greater than or equal to ``EXPLOSION_WAIT_TIME``. Because we added ``delta``, this will only be called once. If ``explosion_wait_timer`` is greater or equal to ``EXPLOSION_WAIT_TIME``, the grenade has waited long enough to let the :ref:`Particles ` play and we can free/destroy the grenade, as we no longer need it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:148 -msgid "Let's quickly get the sticky grenade set up too. Open up ``Sticky_Grenade.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:150 -msgid "``Sticky_Grenade.tscn`` is almost identical to ``Grenade.tscn``, with one small addition. We now have a second :ref:`Area `, called ``Sticky_Area``. We will be using ``Stick_Area`` to detect when the sticky grenade has collided with the environment and needs to stick to something." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:154 -msgid "Select ``Sticky_Grenade`` and make a new script called ``Sticky_Grenade.gd``. Add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:244 -msgid "The code above is almost identical to the code for ``Grenade.gd``, so let's just go over what's changed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:246 -msgid "Firstly, we have a few more class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:248 -msgid "``attached``: A variable for tracking whether or not the sticky grenade has attached to a :ref:`PhysicsBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:249 -msgid "``attach_point``: A variable to hold a :ref:`Spatial ` that will be at the position where the sticky grenade collided." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:250 -msgid "``player_body``: The player's :ref:`KinematicBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:252 -msgid "They have been added to enable the sticky grenade to stick to any :ref:`PhysicsBody ` it might hit. We also now need the player's :ref:`KinematicBody ` so the sticky grenade does not stick to the player when the player throws it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:257 -msgid "Now let's look at the small change in ``_ready``. In ``_ready`` we've added a line of code so when any body enters ``Stick_Area``, the ``collided_with_body`` function is called." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:262 -msgid "Next let's take a look at ``collided_with_body``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:264 -msgid "Firstly, we make sure the sticky grenade is not colliding with itself. Because the sticky :ref:`Area ` does not know it's attached to the grenade's :ref:`RigidBody `, we need to make sure it's not going to stick to itself by checking to make sure the body it has collided with is not itself. If we have collided with ourself, we ignore it by returning." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:269 -msgid "We then check to see if we have something assigned to ``player_body``, and if the body the sticky grenade has collided with is the player that threw it. If the body the sticky grenade has collided with is indeed ``player_body``, we ignore it by returning." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:272 -msgid "Next, we check if the sticky grenade has attached to something already or not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:274 -msgid "If the sticky grenade is not attached, we then set ``attached`` to ``true`` so we know the sticky grenade has attached to something." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:276 -msgid "We then make a new :ref:`Spatial ` node, and make it a child of the body the sticky grenade collided with. We then set the :ref:`Spatial `'s position to the sticky grenade's current global position." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:279 -msgid "Because we've added the :ref:`Spatial ` as a child of the body the sticky grenade has collided with, it will follow along with said body. We can then use this :ref:`Spatial ` to set the sticky grenade's position, so it is always at the same position relative to the body it collided with." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:282 -msgid "We then disable ``rigid_shape`` so the sticky grenade is not constantly moving whatever body it has collided with. Finally, we set our mode to ``MODE_STATIC`` so the grenade does not move." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:287 -msgid "Finally, lets go over the few changes in ``_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:289 -msgid "Now we're checking to see if the sticky grenade is attached right at the top of ``_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:291 -msgid "If the sticky grenade is attached, we then make sure the attached point is not equal to ``null``. If the attached point is not equal to ``null``, we set the sticky grenade's global position (using its global :ref:`Transform `'s origin) to the global position of the :ref:`Spatial ` assigned to ``attach_point`` (using its global :ref:`Transform `'s origin)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:295 -msgid "The only other change is now before we free/destroy the sticky grenade is to check to see if the sticky grenade has an attached point. If it does, we also call ``queue_free`` on the attach point, so it's also freed/destroyed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:299 -msgid "Adding grenades to the player" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:301 -msgid "Now we need to add some code to ``Player.gd`` so we can use the grenades." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:303 -msgid "Firstly, open up ``Player.tscn`` and expand the node tree until you get to ``Rotation_Helper``. Notice how in ``Rotation_Helper`` we have a node called ``Grenade_Toss_Pos``. This is where we will be spawning the grenades." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:306 -msgid "Also notice how it's slightly rotated on the ``X`` axis, so it's not pointing straight, but rather slightly up. By changing the rotation of ``Grenade_Toss_Pos``, you can change the angle at which the grenades are tossed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:309 -msgid "Okay, now let's start making the grenades work with the player. Add the following class variables to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:319 -msgid "``grenade_amounts``: The amount of grenades the player is currently carrying (for each type of grenade)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:320 -msgid "``current_grenade``: The name of the grenade the player is currently using." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:321 -msgid "``grenade_scene``: The grenade scene we worked on earlier." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:322 -msgid "``sticky_grenade_scene``: The sticky grenade scene we worked on earlier." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:323 -msgid "``GRENADE_THROW_FORCE``: The force at which the player will throw the grenades." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:325 -msgid "Most of these variables are similar to how we have our weapons set up." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:327 -msgid "While it's possible to make a more modular grenade system, I found it was not worth the additional complexity for just two grenades. If you were going to make a more complex FPS with more grenades, you'd likely want to make a system for grenades similar to how we have the weapons set up." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:332 -msgid "Now we need to add some code in ``_process_input`` Add the following to ``_process_input``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:362 -msgid "Let's go over what's happening here." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:364 -msgid "Firstly, we check to see if the ``change_grenade`` action has just been pressed. If it has, we then check to see which grenade the player is currently using. Based on the name of the grenade the player is currently using, we change ``current_grenade`` to the opposite grenade name." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:367 -msgid "Next we check to see if the ``fire_grenade`` action has just been pressed. If it has, we then check to see if the player has more than ``0`` grenades for the current grenade type selected." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:370 -msgid "If the player has more than ``0`` grenades, we then remove one from the grenade amounts for the current grenade. Then, based on the grenade the player is currently using, we instance the proper grenade scene and assign it to ``grenade_clone``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:373 -msgid "Next we add ``grenade_clone`` as a child of the node at the root and set its global :ref:`Transform ` to ``Grenade_Toss_Pos``'s global :ref:`Transform `. Finally, we apply an impulse to the grenade so that it is launched forward, relative to the ``Z`` directional vector of ``grenade_clone``'s." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:379 -msgid "Now the player can use both types of grenades, but there are still a few things we should probably add before we move on to adding the other things." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:381 -msgid "We still need a way to show the player how many grenades are left, and we should probably add a way to get more grenades when the player picks up ammo." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:383 -msgid "Firstly, let's change some of the code in ``Player.gd`` to show how many grenades are left. Change ``process_UI`` to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:399 -msgid "Now we'll show how many grenades the player has left in the UI." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:401 -msgid "While we're still in ``Player.gd``, let's add a function to add grenades to the player. Add the following function to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:409 -msgid "Now we can add a grenade using ``add_grenade``, and it will automatically be clamped to a maximum of ``4`` grenades." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:411 -msgid "You can change the ``4`` to a constant if you want. You'd need to make a new global constant, something like ``MAX_GRENADES``, and then change the clamp from ``clamp(grenade_amounts[current_grenade], 0, 4)`` to ``clamp(grenade_amounts[current_grenade], 0, MAX_GRENADES)``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:414 -msgid "If you do not want to limit how many grenades the player can carry, remove the line that clamps the grenades altogether!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:416 -msgid "Now we have a function to add grenades, let's open up ``AmmoPickup.gd`` and use it!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:418 -msgid "Open up ``AmmoPickup.gd`` and go to the ``trigger_body_entered`` function. Change it to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:433 -msgid "Now we are also checking to see if the body has the ``add_grenade`` function. If it does, we call it like we call ``add_ammo``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:435 -msgid "You may have noticed we are using a new constant we have not defined yet, ``GRENADE_AMOUNTS``. Let's add it! Add the following class variable to ``AmmoPickup.gd`` with the other class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:442 -msgid "``GRENADE_AMOUNTS``: The amount of grenades each pickup contains." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:444 -msgid "Notice how the second element in ``GRENADE_AMOUNTS`` is ``0``. This is so the small ammo pickup does not give the player any additional grenades." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:449 -msgid "Now you should be able to throw grenades! Go give it a try!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:453 -msgid "Adding the ability to grab and throw RigidBody nodes to the player" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:455 -msgid "Next, let's give the player the ability to pick up and throw :ref:`RigidBody ` nodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:457 -msgid "Open up ``Player.gd`` and add the following class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:466 -msgid "``grabbed_object``: A variable to hold the grabbed :ref:`RigidBody ` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:467 -msgid "``OBJECT_THROW_FORCE``: The force with which the player throws the grabbed object." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:468 -msgid "``OBJECT_GRAB_DISTANCE``: The distance away from the camera at which the player holds the grabbed object." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:469 -msgid "``OBJECT_GRAB_RAY_DISTANCE``: The distance the :ref:`Raycast ` goes. This is the player's grab distance." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:471 -msgid "With that done, all we need to do is add some code to ``process_input``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:509 -msgid "Let's go over what's happening." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:511 -msgid "Firstly, we check to see if the action pressed is the ``fire`` action, and that the player is using the ``UNARMED`` 'weapon'. This is because we only want the player to be able to pick up and throw objects when the player is not using any weapons. This is a design choice, but I feel it gives ``UNARMED`` a use." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:515 -msgid "Next we check to see whether or not ``grabbed_object`` is ``null``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:519 -msgid "If ``grabbed_object`` is ``null``, we want to see if we can pick up a :ref:`RigidBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:521 -msgid "We first get the direct space state from the current :ref:`World `. This is so we can cast a ray entirely from code, instead of having to use a :ref:`Raycast ` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:524 -msgid "See :ref:`Ray-casting ` for more information on raycasting in Godot." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:526 -msgid "Then we get the center of the screen by dividing the current :ref:`Viewport ` size in half. We then get the ray's origin point and end point using ``project_ray_origin`` and ``project_ray_normal`` from the camera. If you want to know more about how these functions work, see :ref:`Ray-casting `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:529 -msgid "Next we send the ray into the space state and see if it gets a result. We add the player and the knife's :ref:`Area ` as two exceptions so the player cannot carry themselves or the knife's collision :ref:`Area `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:532 -msgid "Then we check to see if we got a result back from the ray. If no object has collided with the ray, an empty Dictionary will be returned. If the Dictionary is not empty (i.e. at least one object has collided), we then see if the collider the ray collided with is a :ref:`RigidBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:534 -msgid "If the ray collided with a :ref:`RigidBody `, we set ``grabbed_object`` to the collider the ray collided with. We then set the mode on the :ref:`RigidBody ` we collided with to ``MODE_STATIC`` so it doesn't move in our hands." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:537 -msgid "Finally, we set the grabbed :ref:`RigidBody `'s collision layer and collision mask to ``0``. This will make the grabbed :ref:`RigidBody ` have no collision layer or mask, which means it will not be able to collide with anything as long as we are holding it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:542 -msgid "See :ref:`Physics introduction ` for more information on Godot collision masks." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:547 -msgid "If ``grabbed_object`` is not ``null``, then we need to throw the :ref:`RigidBody ` the player is holding." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:549 -msgid "We first set the mode of the :ref:`RigidBody ` we are holding to ``MODE_RIGID``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:551 -msgid "This is making a rather large assumption that all the rigid bodies will be using ``MODE_RIGID``. While that is the case for this tutorial series, that may not be the case in other projects." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:554 -msgid "If you have rigid bodies with different modes, you may need to store the mode of the :ref:`RigidBody ` you have picked up into a class variable so you can change it back to the mode it was in before you picked it up." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:557 -msgid "Then we apply an impulse to send it flying forward. We send it flying in the direction the camera is facing, using the force we set in the ``OBJECT_THROW_FORCE`` variable." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:559 -msgid "We then set the grabbed :ref:`RigidBody `'s collision layer and mask to ``1``, so it can collide with anything on layer ``1`` again." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:561 -msgid "This is, once again, making a rather large assumption that all the rigid bodies will be only on collision layer ``1``, and all collision masks will be on layer ``1``. If you are using this script in other projects, you may need to store the collision layer/mask of the :ref:`RigidBody ` in a variable before you change them to ``0``, so you would have the original collision layer/mask to set for them when you are reversing the process." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:564 -msgid "Finally, we set ``grabbed_object`` to ``null`` since the player has successfully thrown the held object." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:568 -msgid "The last thing we do is check to see whether or not ``grabbed_object`` is equal to ``null``, outside all of the grabbing/throwing related code." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:570 -msgid "While technically not input related, it's easy enough to place the code moving the grabbed object here because it's only two lines, and then all of the grabbing/throwing code is in one place" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:573 -msgid "If the player is holding an object, we set its global position to the camera's position plus ``OBJECT_GRAB_DISTANCE`` in the direction the camera is facing." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:577 -msgid "Before we test this, we need to change something in ``_physics_process``. While the player is holding an object, we do not want the player to be able to change weapons or reload, so change ``_physics_process`` to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:594 -msgid "Now the player cannot change weapons or reload while holding an object." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:596 -msgid "Now you can grab and throw RigidBody nodes while you're in the ``UNARMED`` state! Go give it a try!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:599 -msgid "Adding a turret" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:601 -msgid "Next, let's make a turret to shoot the player!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:603 -msgid "Open up ``Turret.tscn``. Expand ``Turret`` if it's not already expanded." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:605 -msgid "Notice how the turret is broken up into several parts: ``Base``, ``Head``, ``Vision_Area``, and a ``Smoke`` :ref:`Particles ` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:607 -msgid "Open up ``Base`` and you'll find it's a :ref:`StaticBody ` and a mesh. Open up ``Head`` and you'll find there are several meshes, a :ref:`StaticBody ` and a :ref:`Raycast ` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:610 -msgid "One thing to note with the ``Head`` is that the raycast will be where the turret's bullets will fire from if we are using raycasting. We also have two meshes called ``Flash`` and ``Flash_2``. These will be the muzzle flash that briefly shows when the turret fires." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:613 -msgid "``Vision_Area`` is an :ref:`Area ` we'll use as the turret's ability to see. When something enters ``Vision_Area``, we'll assume the turret can see it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:615 -msgid "``Smoke`` is a :ref:`Particles ` node that will play when the turret is destroyed and repairing." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:619 -msgid "Now that we've looked at how the scene is set up, lets start writing the code for the turret. Select ``Turret`` and create a new script called ``Turret.gd``. Add the following to ``Turret.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:785 -msgid "This is quite a bit of code, so let's break it down function by function. Let's first look at the class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:787 -msgid "``use_raycast``: An exported boolean so we can change whether the turret uses objects or raycasting for bullets." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:788 -msgid "``TURRET_DAMAGE_BULLET``: The amount of damage a single bullet scene does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:789 -msgid "``TURRET_DAMAGE_RAYCAST``: The amount of damage a single :ref:`Raycast ` bullet does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:790 -msgid "``FLASH_TIME``: The amount of time (in seconds) the muzzle flash meshes are visible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:791 -msgid "``flash_timer``: A variable for tracking how long the muzzle flash meshes have been visible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:792 -msgid "``FIRE_TIME``: The amount of time (in seconds) needed to fire a bullet." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:793 -msgid "``fire_timer``: A variable for tracking how much time has passed since the turret last fired." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:794 -msgid "``node_turret_head``: A variable to hold the ``Head`` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:795 -msgid "``node_raycast``: A variable to hold the :ref:`Raycast ` node attached to the turret's head." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:796 -msgid "``node_flash_one``: A variable to hold the first muzzle flash :ref:`MeshInstance `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:797 -msgid "``node_flash_two``: A variable to hold the second muzzle flash :ref:`MeshInstance `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:798 -msgid "``ammo_in_turret``: The amount of ammo currently in the turret." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:799 -msgid "``AMMO_IN_FULL_TURRET``: The amount of ammo in a full turret." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:800 -msgid "``AMMO_RELOAD_TIME``: The amount of time it takes the turret to reload." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:801 -msgid "``ammo_reload_timer``: A variable for tracking how long the turret has been reloading." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:802 -msgid "``current_target``: The turret's current target." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:803 -msgid "``is_active``: A variable for tracking whether the turret is able to fire at the target." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:804 -msgid "``PLAYER_HEIGHT``: The amount of height we're adding to the target so we're not shooting at its feet." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:805 -msgid "``smoke_particles``: A variable to hold the smoke particles node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:806 -msgid "``turret_health``: The amount of health the turret currently has." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:807 -msgid "``MAX_TURRET_HEALTH``: The amount of health a fully healed turret has." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:808 -msgid "``DESTROYED_TIME``: The amount of time (in seconds) it takes for a destroyed turret to repair itself." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:809 -msgid "``destroyed_timer``: A variable for tracking the amount of time a turret has been destroyed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:810 -msgid "``bullet_scene``: The bullet scene the turret fires (same scene as the player's pistol)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:812 -msgid "Whew, that's quite a few class variables!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:816 -msgid "Let's go through ``_ready`` next." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:818 -msgid "Firstly, we get the vision area and connect the ``body_entered`` and ``body_exited`` signals to ``body_entered_vision`` and ``body_exited_vision``, respectively." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:820 -msgid "We then get all the nodes and assign them to their respective variables." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:822 -msgid "Next, we add some exceptions to the :ref:`Raycast ` so the turret cannot hurt itself." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:824 -msgid "Then we make both flash meshes invisible at start, since we are not going to be firing during ``_ready``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:826 -msgid "We then get the smoke particles node and assign it to the ``smoke_particles`` variable. We also set ``emitting`` to ``false`` to ensure the particles are not emitting until the turret is broken." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:829 -msgid "Finally, we set the turret's health to ``MAX_TURRET_HEALTH`` so it starts at full health." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:833 -msgid "Now let's go through ``_physics_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:835 -msgid "Firstly, we check whether the turret is active. If the turret is active, we want to process the firing code." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:837 -msgid "Next, if ``flash_timer`` is greater than zero, meaning the flash meshes are visible, we want to remove delta from ``flash_timer``. If ``flash_timer`` gets to zero or less after we've subtracted ``delta``, we want to hide both of the flash meshes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:841 -msgid "Next, we check whether the turret has a target. If the turret has a target, we make the turret head look at it, adding ``PLAYER_HEIGHT`` so it is not aiming at the player's feet." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:844 -msgid "We then check whether the turret's health is greater than zero. If it is, we then check whether there is ammo in the turret." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:846 -msgid "If there is, we then check whether ``fire_timer`` is greater than zero. If it is, the turret cannot fire and we need to remove ``delta`` from ``fire_timer``. If ``fire_timer`` is less than or equal to zero, the turret can fire a bullet, so we call the ``fire_bullet`` function." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:849 -msgid "If there isn't any ammo in the turret, we check whether ``ammo_reload_timer`` is greater than zero. If it is, we subtract ``delta`` from ``ammo_reload_timer``. If ``ammo_reload_timer`` is less than or equal to zero, we set ``ammo_in_turret`` to ``AMMO_IN_FULL_TURRET`` because the turret has waited long enough to refill its ammo." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:853 -msgid "Next, we check whether the turret's health is less than or equal to ``0`` outside of whether it is active or not. If the turret's health is zero or less, we then check whether ``destroyed_timer`` is greater than zero. If it is, we subtract ``delta`` from ``destroyed_timer``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:856 -msgid "If ``destroyed_timer`` is less than or equal to zero, we set ``turret_health`` to ``MAX_TURRET_HEALTH`` and stop emitting smoke particles by setting ``smoke_particles.emitting`` to ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:861 -msgid "Next let's go through ``fire_bullet``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:863 -msgid "Firstly, we check whether the turret is using a raycast." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:865 -msgid "The code for using a raycast is almost entirely the same as the code in the rifle from :ref:`doc_fps_tutorial_part_two`, so I'm only going to go over it briefly." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:868 -msgid "We first make the raycast look at the target, ensuring the raycast will hit the target if nothing is in the way. We then force the raycast to update so we get a frame perfect collision check. We then check whether the raycast has collided with anything. If it has, we then check whether the collided body has the ``bullet_hit`` method. If it does, we call it and pass in the damage a single raycast bullet does along with the raycast's transform. We then subtract ``1`` from ``ammo_in_turret``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:873 -msgid "If the turret is not using a raycast, we spawn a bullet object instead. This code is almost entirely the same as the code in the pistol from :ref:`doc_fps_tutorial_part_two`, so like with the raycast code, I'm only going to go over it briefly." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:876 -msgid "We first make a bullet clone and assign it to ``clone``. We then add that as a child of the root node. We set the bullet's global transform to the barrel end, scale it up since it's too small, and set its damage and speed using the turret's constant class variables. We then subtract ``1`` from ``ammo_in_turret``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:880 -msgid "Then, regardless of which bullet method we used, we make both of the muzzle flash meshes visible. We set ``flash_timer`` and ``fire_timer`` to ``FLASH_TIME`` and ``FIRE_TIME``, respectively. We then check whether the turret has used the last bullet in its ammo. If it has, we set ``ammo_reload_timer`` to ``AMMO_RELOAD_TIME`` so the turret reloads." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:886 -msgid "Let's look at ``body_entered_vision`` next, and thankfully it is rather short." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:888 -msgid "We first check whether the turret currently has a target by checking if ``current_target`` is equal to ``null``. If the turret does not have a target, we then check whether the body that has just entered the vision :ref:`Area ` is a :ref:`KinematicBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:891 -msgid "We're assuming the turret should only fire at :ref:`KinematicBody ` nodes since that is what the player is using." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:893 -msgid "If the body that just entered the vision :ref:`Area ` is a :ref:`KinematicBody `, we set ``current_target`` to the body, and set ``is_active`` to ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:898 -msgid "Now let's look at ``body_exited_vision``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:900 -msgid "Firstly, we check whether the turret has a target. If it does, we then check whether the body that has just left the turret's vision :ref:`Area ` is the turret's target." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:903 -msgid "If the body that has just left the vision :ref:`Area ` is the turret's current target, we set ``current_target`` to ``null``, set ``is_active`` to ``false``, and reset all the variables related to firing the turret since the turret no longer has a target to fire at." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:908 -msgid "Finally, let's look at ``bullet_hit``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:910 -msgid "We first subtract however much damage the bullet causes from the turret's health." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:912 -msgid "Then, we check whether the turret has been destroyed (health being zero or less). If the turret is destroyed, we start emitting the smoke particles and set ``destroyed_timer`` to ``DESTROYED_TIME`` so the turret has to wait before being repaired." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:917 -msgid "Whew, with all of that done and coded, we only have one last thing to do before the turret is ready for use. Open up ``Turret.tscn`` if it's not already open and select one of the :ref:`StaticBody ` nodes from either ``Base`` or ``Head``. Create a new script called ``TurretBodies.gd`` and attach it to whichever :ref:`StaticBody ` you have selected." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:921 -msgid "Add the following code to ``TurretBodies.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:936 -msgid "All this code does is call ``bullet_hit`` on whatever node to which ``path_to_turret_root`` leads. Go back to the editor and assign the :ref:`NodePath ` to the ``Turret`` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:939 -msgid "Now select the other :ref:`StaticBody ` node (either in ``Body`` or ``Head``) and assign ``TurretBodies.gd`` script to it. Once the script is attached, assign again the :ref:`NodePath ` to the ``Turret`` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:944 -msgid "The last thing we need to do is add a way for the player to be hurt. Since all the bullets use the ``bullet_hit`` function, we need to add that function to the player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:946 -msgid "Open ``Player.gd`` and add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:953 -msgid "With all that done, you should have fully operational turrets! Go place a few in one/both/all of the scenes and give them a try!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:956 -msgid "Final notes" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:960 -msgid "Now you can pick up :ref:`RigidBody ` nodes and throw grenades. We now also have turrets to fire at the player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:962 -msgid "In :ref:`doc_fps_tutorial_part_six`, we're going to add a main menu and a pause menu, add a respawn system for the player, and change/move the sound system so we can use it from any script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:965 -msgid "If you ever get lost, be sure to read over the code again!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_five.rst:967 -msgid "You can download the finished project for this part here: :download:`Godot_FPS_Part_5.zip `" -msgstr "" diff --git a/sphinx/templates/tutorials/3d/fps_tutorial/part_four.pot b/sphinx/templates/tutorials/3d/fps_tutorial/part_four.pot deleted file mode 100644 index 8e182c6e10..0000000000 --- a/sphinx/templates/tutorials/3d/fps_tutorial/part_four.pot +++ /dev/null @@ -1,717 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:4 -msgid "Part 4" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:7 -msgid "Part overview" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:9 -msgid "In this part, we will be adding health pickups, ammo pickups, targets the player can destroy, support for joypads, and add the ability to change weapons with the scroll wheel." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:13 -msgid "You are assumed to have finished :ref:`doc_fps_tutorial_part_three` before moving on to this part of the tutorial. The finished project from :ref:`doc_fps_tutorial_part_three` will be the starting project for part 4" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:16 -msgid "Let's get started!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:19 -msgid "Adding joypad input" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:21 -msgid "In Godot, any game controller is referred to as a joypad. This includes: Console controllers, Joysticks (like for flight simulators), Wheels (like for driving simulators), VR Controllers, and more!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:24 -msgid "Firstly, we need to change a few things in our project's input map. Open up the project settings and select the ``Input Map`` tab." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:26 -msgid "Now we need to add some joypad buttons to our various actions. Click the plus icon and select ``Joy Button``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:30 -msgid "Feel free to use whatever button layout you want. Make sure that the device selected is set to ``0``. In the finished project, we will be using the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:32 -msgid "movement_sprint: ``Device 0, Button 4 (L, L1)``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:33 -msgid "fire: ``Device 0, Button 0 (PS Cross, XBox A, Nintendo B)``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:34 -msgid "reload: ``Device 0, Button 0 (PS Square, XBox X, Nintendo Y)``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:35 -msgid "flashlight: ``Device 0, Button 12 (D-Pad Up)``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:36 -msgid "shift_weapon_positive: ``Device 0, Button 15 (D-Pad Right)``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:37 -msgid "shift_weapon_negative: ``Device 0, Button 14 (D-Pad Left)``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:38 -msgid "fire_grenade: ``Device 0, Button 1 (PS Circle, XBox B, Nintendo A).``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:40 -msgid "These are already set up for you if you downloaded the starter assets" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:42 -msgid "Once you are happy with the input, close the project settings and save." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:46 -msgid "Now let's open up ``Player.gd`` and add joypad input." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:48 -msgid "First, we need to define a few new class variables. Add the following class variables to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:56 -msgid "Let's go over what each of these does:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:58 -msgid "``JOYPAD_SENSITIVITY``: This is how fast the joypad's joysticks will move the camera." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:59 -msgid "``JOYPAD_DEADZONE``: The dead zone for the joypad. You may need to adjust depending on your joypad." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:61 -msgid "Many joypads jitter around a certain point. To counter this, we ignore any movement within a radius of JOYPAD_DEADZONE. If we did not ignore said movement, the camera would jitter." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:64 -msgid "Also, we are defining ``JOYPAD_SENSITIVITY`` as a variable instead of a constant because we'll later be changing it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:66 -msgid "Now we are ready to start handling joypad input!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:70 -msgid "In ``process_input``, add the following code just before ``input_movement_vector = input_movement_vector.normalized()``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:113 -msgid "Let's go over what we're doing." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:115 -msgid "Firstly, we check to see if there is a connected joypad." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:117 -msgid "If there is a joypad connected, we then get its left stick axes for right/left and up/down. Because a wired Xbox 360 controller has different joystick axis mapping based on OS, we will use different axes based on the OS." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:121 -msgid "This tutorial assumes you are using a XBox 360 or a PlayStation wired controller. Also, I do not (currently) have access to a Mac computer, so the joystick axes may need changing. If they do, please open a GitHub issue on the Godot documentation repository! Thanks!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:125 -msgid "Next, we check to see if the joypad vector length is within the ``JOYPAD_DEADZONE`` radius. If it is, we set ``joypad_vec`` to an empty Vector2. If it is not, we use a scaled Radial Dead zone for precise dead zone calculation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:128 -msgid "You can find a great article explaining all about how to handle joypad/controller dead zones `here `__." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:131 -msgid "We're using a translated version of the scaled radial dead zone code provided in that article. The article is a great read, and I highly suggest giving it a look!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:134 -msgid "Finally, we add ``joypad_vec`` to ``input_movement_vector``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:136 -msgid "Remember how we normalize ``input_movement_vector``? This is why! If we did not normalize ``input_movement_vector``, the player could move faster if they pushed in the same direction with both the keyboard and the joypad!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:141 -msgid "Make a new function called ``process_view_input`` and add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:216 -msgid "Let's go over what's happening:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:218 -msgid "Firstly, we check the mouse mode. If the mouse mode is not ``MOUSE_MODE_CAPTURED``, we want to return, which will skip the code below." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:220 -msgid "Next, we define a new :ref:`Vector2 ` called ``joypad_vec``. This will hold the right joystick position. Based on the OS, we set its values so it is mapped to the proper axes for the right joystick." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:223 -msgid "As stated above, I do not (currently) have access to a Mac computer, so the joystick axes may need changing. If they do, please open a GitHub issue on the Godot documentation repository! Thanks!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:226 -msgid "We then account for the joypad's dead zone, exactly like in ``process_input``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:228 -msgid "Then, we rotate ``rotation_helper`` and the player's :ref:`KinematicBody ` using ``joypad_vec``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:230 -msgid "Notice how the code that handles rotating the player and ``rotation_helper`` is exactly the same as the code in ``_input``. All we've done is change the values to use ``joypad_vec`` and ``JOYPAD_SENSITIVITY``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:233 -msgid "Due to a few mouse-related bugs on Windows, we cannot put mouse rotation in ``process_view`` as well. Once these bugs are fixed, this will likely be updated to place the mouse rotation here in ``process_view_input`` as well." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:236 -msgid "Finally, we clamp the camera's rotation so the player cannot look upside down." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:240 -msgid "The last thing we need to do is add ``process_view_input`` to ``_physics_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:242 -msgid "Once ``process_view_input`` is added to ``_physics_process``, you should be able to play using a joypad!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:244 -msgid "I decided not to use the joypad triggers for firing because we'd then have to do some more axis managing, and because I prefer to use a shoulder buttons to fire." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:246 -msgid "If you want to use the triggers for firing, you will need to change how firing works in ``process_input``. You need to get the axis values for the triggers, and check if it's over a certain value, say ``0.8`` for example. If it is, you add the same code as when the ``fire`` action was pressed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:250 -msgid "Adding mouse scroll wheel input" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:252 -msgid "Let's add one more input related feature before we start working on the pickups and the target. Let's add the ability to change weapons using the scroll wheel on the mouse." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:254 -msgid "Open up ``Player.gd`` and add the following class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:261 -msgid "Let's go over what each of these new variables will be doing:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:263 -msgid "``mouse_scroll_value``: The value of the mouse scroll wheel." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:264 -msgid "``MOUSE_SENSITIVITY_SCROLL_WHEEL``: How much a single scroll action increases mouse_scroll_value" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:268 -msgid "Now let's add the following to ``_input``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:290 -msgid "Let's go over what's happening here:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:292 -msgid "Firstly, we check if the event is an ``InputEventMouseButton`` event and that the mouse mode is ``MOUSE_MODE_CAPTURED``. Then, we check to see if the button index is either a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:295 -msgid "If the event's index is indeed a button wheel index, we then check to see if it is a ``BUTTON_WHEEL_UP`` or ``BUTTON_WHEEL_DOWN`` index. Based on whether it is up or down, we add or subtract ``MOUSE_SENSITIVITY_SCROLL_WHEEL`` to/from ``mouse_scroll_value``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:298 -msgid "Next, we clamp mouse scroll value to ensure it is inside the range of selectable weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:300 -msgid "We then check to see if the player is changing weapons or reloading. If the player is doing neither, we round ``mouse_scroll_value`` and cast it to an ``int``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:302 -msgid "We are casting ``mouse_scroll_value`` to an ``int`` so we can use it as a key in our dictionary. If we left it as a float, we would get an error when we tried to run the project." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:305 -msgid "Next, we check to see if the weapon name at ``round_mouse_scroll_value`` is not equal to the current weapon name using ``WEAPON_NUMBER_TO_NAME``. If the weapon is different from the player's current weapon, we assign ``changing_weapon_name``, set ``changing_weapon`` to ``true`` so the player will change weapons in ``process_changing_weapon``, and set ``mouse_scroll_value`` to ``round_mouse_scroll_value``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:309 -msgid "The reason we are setting ``mouse_scroll_value`` to the rounded scroll value is because we do not want the player to keep their mouse scroll wheel just in between values, giving them the ability to switch almost extremely fast. By assigning ``mouse_scroll_value`` to ``round_mouse_scroll_value``, we ensure that each weapon takes exactly the same amount of scrolling to change." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:315 -msgid "One more thing we need to change is in ``process_input``. In the code for changing weapons, add the following right after the line ``changing_weapon = true``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:321 -msgid "Now the scroll value will be changed with the keyboard input. If we did not change this, the scroll value would be out of sync. If the scroll wheel were out of sync, scrolling forwards or backwards would not transition to the next/last weapon, but rather the next/last weapon the scroll wheel changed to." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:326 -msgid "Now you can change weapons using the scroll wheel! Go give it a whirl!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:329 -msgid "Adding the health pickups" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:331 -msgid "Now that the player has health and ammo, we ideally need a way to replenish those resources." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:333 -msgid "Open up ``Health_Pickup.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:335 -msgid "Expand ``Holder`` if it's not already expanded. Notice how we have two Spatial nodes, one called ``Health_Kit`` and another called ``Health_Kit_Small``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:337 -msgid "This is because we're actually going to be making two sizes of health pickups, one small and one large/normal. ``Health_Kit`` and ``Health_Kit_Small`` only have a single :ref:`MeshInstance ` as their children." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:340 -msgid "Next expand ``Health_Pickup_Trigger``. This is an :ref:`Area ` node we're going to use to check if the player has walked close enough to pick up the health kit. If you expand it, you'll find two collision shapes, one for each size. We will be using a different collision shape size based on the size of the health pickup, so the smaller health pickup has a trigger collision shape closer to its size." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:344 -msgid "The last thing to note is how we have an :ref:`AnimationPlayer ` node so the health kit bobs and spins around slowly." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:346 -msgid "Select ``Health_Pickup`` and add a new script called ``Health_Pickup.gd``. Add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:405 -msgid "Let's go over what this script is doing, starting with its class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:407 -msgid "``kit_size``: The size of the health pickup. Notice how we're using a ``setget`` function to tell if it's changed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:408 -msgid "``HEALTH_AMMOUNTS``: The amount of health each pickup in each size contains." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:409 -msgid "``RESPAWN_TIME``: The amount of time, in seconds, it takes for the health pickup to respawn" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:410 -msgid "``respawn_timer``: A variable used to track how long the health pickup has been waiting to respawn." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:411 -msgid "``is_ready``: A variable to track whether the ``_ready`` function has been called or not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:413 -msgid "We're using ``is_ready`` because ``setget`` functions are called before ``_ready``; we need to ignore the first kit_size_change call, because we cannot access child nodes until ``_ready`` is called. If we did not ignore the first ``setget`` call, we would get several errors in the debugger." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:417 -msgid "Also, notice how we are using an exported variable. This is so we can change the size of the health pickups in the editor. This makes it so we do not have to make two scenes for the two sizes, since we can easily change sizes in the editor using the exported variable." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:420 -msgid "See :ref:`doc_GDScript` and scroll down to the Exports section for a list of export hints you can use." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:424 -msgid "Let's look at ``_ready``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:426 -msgid "Firstly, we connect the ``body_entered`` signal from the ``Health_Pickup_Trigger`` to the ``trigger_body_entered`` function. This makes it so any body that enters the :ref:`Area ` triggers the ``trigger_body_entered`` function." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:429 -msgid "Next, we set ``is_ready`` to ``true`` so we can use the ``setget`` function." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:431 -msgid "Then we hide all the possible kits and their collision shapes using ``kit_size_change_values``. The first argument is the size of the kit, while the second argument is whether to enable or disable the collision shape and mesh at that size." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:434 -msgid "Then we make only the kit size we selected visible, calling ``kit_size_change_values`` and passing in ``kit_size`` and ``true``, so the size at ``kit_size`` is enabled." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:438 -msgid "Next let's look at ``kit_size_change``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:440 -msgid "The first thing we do is check to see if ``is_ready`` is ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:442 -msgid "If ``is_ready`` is ``true``, we then make whatever kit already assigned to ``kit_size`` disabled using ``kit_size_change_values``, passing in ``kit_size`` and ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:444 -msgid "Then we assign ``kit_size`` to the new value passed in, ``value``. Then we call ``kit_size_change_values`` passing in ``kit_size`` again, but this time with the second argument as ``true`` so we enable it. Because we changed ``kit_size`` to the passed in value, this will make whatever kit size was passed in visible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:447 -msgid "If ``is_ready`` is not ``true``, we simply assign ``kit_size`` to the passed in ``value``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:451 -msgid "Now let's look at ``kit_size_change_values``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:453 -msgid "The first thing we do is check to see which size was passed in. Based on which size we want to enable/disable, we want to get different nodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:455 -msgid "We get the collision shape for the node corresponding to ``size`` and disable it based on the ``enabled`` passed in argument/variable." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:457 -msgid "Why are we using ``!enable`` instead of ``enable``? This is so when we say we want to enable the node, we can pass in ``true``, but since :ref:`CollisionShape ` uses disabled instead of enabled, we need to flip it. By flipping it, we can enable the collision shape and make the mesh visible when ``true`` is passed in." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:461 -msgid "We then get the correct :ref:`Spatial ` node holding the mesh and set its visibility to ``enable``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:463 -msgid "This function may be a little confusing; try to think of it like this: We're enabling/disabling the proper nodes for ``size`` using ``enabled``. This is so we cannot pick up health for a size that is not visible, and so only the mesh for the proper size will be visible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:468 -msgid "Finally, let's look at ``trigger_body_entered``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:470 -msgid "The first thing we do is check whether or not the body that has just entered has a method/function called ``add_health``. If it does, we then call ``add_health`` and pass in the health provided by the current kit size." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:473 -msgid "Then we set ``respawn_timer`` to ``RESPAWN_TIME`` so the player has to wait before the player can get health again. Finally, call ``kit_size_change_values``, passing in ``kit_size`` and ``false`` so the kit at ``kit_size`` is invisible until it has waited long enough to respawn." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:478 -msgid "The last thing we need to do before the player can use this health pickup is add a few things to ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:480 -msgid "Open up ``Player.gd`` and add the following class variable:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:486 -msgid "``MAX_HEALTH``: The maximum amount of health a player can have." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:488 -msgid "Now we need to add the ``add_health`` function to the player. Add the following to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:496 -msgid "Let's quickly go over what this does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:498 -msgid "We first add ``additional_health`` to the player's current health. We then clamp the health so that it cannot take on a value higher than ``MAX_HEALTH``, nor a value lower than ``0``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:503 -msgid "With that done, the player can now collect health! Go place a few ``Health_Pickup`` scenes around and give it a try. You can change the size of the health pickup in the editor when a ``Health_Pickup`` instanced scene is selected, from a convenient drop down." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:507 -msgid "Adding the ammo pickups" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:509 -msgid "While adding health is good and all, we can't reap the rewards from adding it since nothing can (currently) damage us. Let's add some ammo pickups next!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:512 -msgid "Open up ``Ammo_Pickup.tscn``. Notice how it's structured exactly the same as ``Health_Pickup.tscn``, but with the meshes and trigger collision shapes changed slightly to account for the difference in mesh sizes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:515 -msgid "Select ``Ammo_Pickup`` and add a new script called ``Ammo_Pickup.gd``. Add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:576 -msgid "You may have noticed this code looks almost exactly the same as the health pickup. That's because it largely is the same! Only a few things have been changed, and that's what we're going to go over." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:579 -msgid "Firstly, notice the change to ``AMMO_AMOUNTS`` from ``HEALTH_AMMOUNTS``. ``AMMO_AMOUNTS`` will be how many ammo clips/magazines the pickup adds to the current weapon. (Unlike in the case of ``HEALTH_AMMOUNTS``, which has stood for how many health points would be awarded, we add an entire clip to the current weapon instead of the raw ammo amount)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:582 -msgid "The only other thing to notice is in ``trigger_body_entered``. We're checking for the existence of and calling a function called ``add_ammo`` instead of ``add_health``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:584 -msgid "Other than those two small changes, everything else is the same as the health pickup!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:588 -msgid "All we need to do to make the ammo pickups work is add a new function to the player. Open ``Player.gd`` and add the following function:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:597 -msgid "Let's go over what this function does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:599 -msgid "The first thing we check is whether the player is ``UNARMED``. Because ``UNARMED`` does not have a node/script, we want to make sure the player is not ``UNARMED`` before trying to get the node/script attached to ``current_weapon_name``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:602 -msgid "Next, we check to see if the current weapon can be refilled. If the current weapon can, we add a full clip/magazine worth of ammo to the weapon by multiplying the current weapon's ``AMMO_IN_MAG`` value by however many ammo clips we're adding (``additional_ammo``)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:607 -msgid "With that done, you should now be able to get additional ammo! Go place some ammo pickups in one/both/all of the scenes and give it a try!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:609 -msgid "Notice how we're not limiting the amount of ammo you can carry. To limit the amount of ammo each weapon can carry, you need to add an additional variable to each weapon's script, and then clamp the weapon's ``spare_ammo`` variable after adding ammo in ``add_ammo``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:613 -msgid "Adding breakable targets" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:615 -msgid "Before we end this part, let's add some targets." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:617 -msgid "Open up ``Target.tscn`` and take a look at the scenes in the scene tree." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:619 -msgid "Firstly, notice how we're not using a :ref:`RigidBody ` node, but a :ref:`StaticBody ` one. The reason behind this is our non-broken targets will not be moving anywhere; using a :ref:`RigidBody ` would be more hassle than it's worth since all it has to do is stay still." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:623 -msgid "We also save a tiny bit of performance using a :ref:`StaticBody ` over a :ref:`RigidBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:625 -msgid "The other thing to note is we have a node called ``Broken_Target_Holder``. This node is going to hold a spawned/instanced scene called ``Broken_Target.tscn``. Open up ``Broken_Target.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:628 -msgid "Notice how the target is broken up into five pieces, each a :ref:`RigidBody ` node. We're going to spawn/instance this scene when the target takes too much damage and needs to be destroyed. Then, we're going to hide the non-broken target, so it looks like the target shattered rather than a shattered target was spawned/instanced." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:632 -msgid "While you still have ``Broken_Target.tscn`` open, attach ``RigidBody_hit_test.gd`` to all of the :ref:`RigidBody ` nodes. This will make it so the player can shoot at the broken pieces and they will react to the bullets." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:635 -msgid "Alright, now switch back to ``Target.tscn``, select the ``Target`` :ref:`StaticBody ` node and create a new script called ``Target.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:637 -msgid "Add the following code to ``Target.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:695 -msgid "Let's go over what this script does, starting with the class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:697 -msgid "``TARGET_HEALTH``: The amount of damage needed to break a fully healed target." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:698 -msgid "``current_health``: The amount of health this target currently has." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:699 -msgid "``broken_target_holder``: A variable to hold the ``Broken_Target_Holder`` node so we can use it easily." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:700 -msgid "``target_collision_shape``: A variable to hold the :ref:`CollisionShape ` for the non-broken target." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:701 -msgid "``TARGET_RESPAWN_TIME``: The length of time, in seconds, it takes for a target to respawn." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:702 -msgid "``target_respawn_timer``: A variable to track how long a target has been broken." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:703 -msgid "``destroyed_target``: A :ref:`PackedScene ` to hold the broken target scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:705 -msgid "Notice how we're using an exported variable (a :ref:`PackedScene `) to get the broken target scene instead of using ``preload``. By using an exported variable, we can choose the scene from the editor, and if we need to use a different scene, it's as easy as selecting a different scene in the editor; we don't need to go to the code to change the scene we're using." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:711 -msgid "Let's look at ``_ready``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:713 -msgid "The first thing we do is get the broken target holder and assign it to ``broken_target_holder``. Notice how we're using ``get_parent().get_node()`` here, instead of ``$``. If you wanted to use ``$``, then you'd need to change ``get_parent().get_node()`` to ``$\"../Broken_Target_Holder\"``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:716 -msgid "At the time of when this was written, I did not realize you can use ``$\"../NodeName\"`` to get the parent nodes using ``$``, which is why ``get_parent().get_node()`` is used instead." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:719 -msgid "Next, we get the collision shape and assign it to ``target_collision_shape``. The reason we need the collision shape is because even when the mesh is invisible, the collision shape will still exist in the physics world. This makes it so the player could interact with a non-broken target even though it's invisible, which is not what we want. To get around this, we will disable/enable the collision shape as we make the mesh visible/invisible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:725 -msgid "Next let's look at ``_physics_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:727 -msgid "We're only going to be using ``_physics_process`` for respawning, and so the first thing we do is check to see if ``target_respawn_timer`` is greater than ``0``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:729 -msgid "If it is, we then subtract ``delta`` from it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:731 -msgid "Then we check to see if ``target_respawn_timer`` is ``0`` or less. The reason behind this is since we just removed ``delta`` from ``target_respawn_timer``, if it's ``0`` or less, then the target just got here, effectively allowing us to do whatever we need to do when the timer is finished." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:734 -msgid "In this case, we want to respawn the target." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:736 -msgid "The first thing we do is remove all children in the broken target holder. We do this by iterating over all of the children in ``broken_target_holder`` and free them using ``queue_free``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:738 -msgid "Next, we enable the collision shape by setting its ``disabled`` boolean to ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:740 -msgid "Then we make the target, and all of its children nodes, visible again." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:742 -msgid "Finally, we reset the target's health (``current_health``) to ``TARGET_HEALTH``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:746 -msgid "Finally, let's look at ``bullet_hit``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:748 -msgid "The first thing we do is subtract however much damage the bullet does from the target's health." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:750 -msgid "Next we check to see if the target is at ``0`` health or lower. If it is, the target has just died and we need to spawn a broken target." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:752 -msgid "We first instance a new destroyed target scene, and assign it to a new variable, a ``clone``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:754 -msgid "Next we add the ``clone`` as a child of the broken target holder." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:756 -msgid "For bonus effect, we want to make all the target pieces explode outwards. To do this, we iterate over all the children in ``clone``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:758 -msgid "For each child, we first check to see if it's a :ref:`RigidBody ` node. If it is, we then calculate the center position of the target relative to the child node. Then we figure out which direction the child node is relative to the center. Using those calculated variables, we push the child from the calculated center, in the direction away from the center, using the damage of the bullet as the force." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:762 -msgid "We multiply the damage by ``12`` so it has a more dramatic effect. You can change this to a higher or lower value depending on how explosively you want your targets to shatter." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:765 -msgid "Next, we set the target's respawn timer. We set the timer to ``TARGET_RESPAWN_TIME``, so it takes ``TARGET_RESPAWN_TIME`` in seconds until it is respawned." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:767 -msgid "Then we disable the non-broken target's collision shape, and set the target's visibility to ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:771 -msgid "Make sure to set the exported ``destroyed_target`` value for ``Target.tscn`` in the editor! Otherwise the targets will not be destroyed and you will get an error!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:774 -msgid "With that done, go place some ``Target.tscn`` instances around in one/both/all of the levels. You should find they explode into five pieces after they've taken enough damage. After a little while, they'll respawn into a whole target again." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:778 -msgid "Final notes" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:782 -msgid "Now you can use a joypad, change weapons with the mouse's scroll wheel, replenish your health and ammo, and break targets with your weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:784 -msgid "In the next part, :ref:`doc_fps_tutorial_part_five`, we're going to add grenades to our player, give our player the ability to grab and throw objects, and add turrets!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:787 -msgid "If you ever get lost, be sure to read over the code again!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_four.rst:789 -msgid "You can download the finished project for this part here: :download:`Godot_FPS_Part_4.zip `" -msgstr "" diff --git a/sphinx/templates/tutorials/3d/fps_tutorial/part_one.pot b/sphinx/templates/tutorials/3d/fps_tutorial/part_one.pot deleted file mode 100644 index f61b3d9cc3..0000000000 --- a/sphinx/templates/tutorials/3d/fps_tutorial/part_one.pot +++ /dev/null @@ -1,718 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:4 -msgid "Part 1" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:7 -msgid "Tutorial introduction" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:11 -msgid "This tutorial series will show you how to make a single player FPS game." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:13 -msgid "Throughout the course of this tutorial series, we will cover how:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:15 -msgid "To make a first person character that can move, sprint, and jump." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:16 -msgid "To make a simple animation state machine for handling animation transitions." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:17 -msgid "To add three weapons to the first person character, each using a different way to handle bullet collisions:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:18 -msgid "A knife (using an :ref:`Area `)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:19 -msgid "A pistol (Bullet scenes)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:20 -msgid "A rifle (using a :ref:`Raycast `)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:21 -msgid "To add two different types of grenades to the first person character:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:22 -msgid "A normal grenade" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:23 -msgid "A sticky grenade" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:24 -msgid "To add the ability to grab and throw :ref:`RigidBody ` nodes" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:25 -msgid "To add joypad input for the player" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:26 -msgid "To add ammo and reloading for all weapons that consume ammo." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:27 -msgid "To add ammo and health pick ups" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:28 -msgid "In two sizes: big and small" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:29 -msgid "To add an automatic turret" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:30 -msgid "That can fire using bullet objects or a :ref:`Raycast `" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:31 -msgid "To add targets that break when they've taken enough damage" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:32 -msgid "To add sounds that play when the guns fire." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:33 -msgid "To add a simple main menu:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:34 -msgid "With an options menu for changing how the game runs" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:35 -msgid "With a level select screen" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:36 -msgid "To add a universal pause menu we can access anywhere" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:38 -msgid "While this tutorial can be completed by beginners, it is highly advised to complete :ref:`doc_your_first_game`, if you are new to Godot and/or game development **before** going through this tutorial series." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:43 -msgid "Remember: Making 3D games is much harder than making 2D games. If you do not know how to make 2D games, you will likely struggle making 3D games." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:46 -msgid "This tutorial assumes you have experience working with the Godot editor, basic programming experience in GDScript, and basic experience in game development." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:49 -msgid "You can find the start assets for this tutorial here: :download:`Godot_FPS_Starter.zip `" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:51 -msgid "The provided starter assets contain an animated 3D model, a bunch of 3D models for making levels, and a few scenes already configured for this tutorial." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:54 -msgid "All assets provided (unless otherwise noted) were originally created by TwistedTwigleg, with changes/additions by the Godot community. All original assets provided for this tutorial are released under the ``MIT`` license." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:57 -msgid "Feel free to use these assets however you want! All original assets belong to the Godot community, with the other assets belonging to those listed below:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:59 -msgid "The skybox is created by **StumpyStrust** on OpenGameArt. The skybox used is licensed under ``CC0``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:62 -msgid "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open Font License, Version 1.1``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:64 -msgid "You can find the finished project for each part at the bottom of each part's page" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:67 -msgid "Part overview" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:69 -msgid "In this part we will be making a first person player that can move around the environment." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:74 -msgid "By the end of this part, you will have a working first-person character who can move around the game environment, sprint, look around with a mouse based first person camera, jump into the air, and turn a flash light on and off." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:78 -msgid "Getting everything ready" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:80 -msgid "Launch Godot and open up the project included in the starter assets." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:82 -msgid "While these assets are not necessarily required to use the scripts provided in this tutorial, they will make the tutorial much easier to follow, as there are several pre-setup scenes we will be using throughout the tutorial series." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:86 -msgid "First, open the project settings and go to the \"Input Map\" tab. You'll find several actions have already been defined. We will be using these actions for our player. Feel free to change the keys bound to these actions if you want." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:92 -msgid "Let's take a second to see what we have in the starter assets." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:94 -msgid "Included in the starter assets are several scenes. For example, in ``res://`` we have 14 scenes, most of which we will be visiting as we go through this tutorial series." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:97 -msgid "For now let's open up ``Player.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:99 -msgid "There are a bunch of scenes and a few textures in the ``Assets`` folder. You can look at these if you want, but we will not be exploring through ``Assets`` in this tutorial series. ``Assets`` contains all the models used for each of the levels, as well as some textures and materials." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:104 -msgid "Making the FPS movement logic" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:106 -msgid "Once you have ``Player.tscn`` open, let's take a quick look at how it is set up:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:110 -msgid "First, notice how the player's collision shapes are set up. Using a vertical pointing capsule as the collision shape for the player is fairly common in most first person games." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:113 -msgid "We are adding a small square to the 'feet' of the player so the player does not feel like they are balancing on a single point." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:116 -msgid "We do want the 'feet' slightly higher than the bottom of the capsule so we can roll over slight edges. Where to place the 'feet' is dependent on your levels and how you want your player to feel." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:119 -msgid "Many times the player will notice the collision shape being circular when they walk to an edge and slide off. We are adding the small square at the bottom of the capsule to reduce sliding on, and around, edges." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:123 -msgid "Another thing to notice is how many nodes are children of ``Rotation_Helper``. This is because ``Rotation_Helper`` contains all the nodes we want to rotate on the ``X`` axis (up and down). The reason behind this is so we can rotate ``Player`` on the ``Y`` axis, and ``Rotation_helper`` on the ``X`` axis." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:128 -msgid "Had we not used ``Rotation_helper``, we would've likely had cases of rotating on both the ``X`` and ``Y`` axes simultaneously, potentially further degenerating into a state of rotation on all three axes in some cases." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:132 -msgid "See :ref:`using transforms ` for more information" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:136 -msgid "Attach a new script to the ``Player`` node and call it ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:138 -msgid "Let's program our player by adding the ability to move around, look around with the mouse, and jump. Add the following code to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:375 -msgid "This is a lot of code, so let's break it down function by function:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:377 -msgid "While copy and pasting code is ill advised, as you can learn a lot from manually typing the code in, you can copy and paste the code from this page directly into the script editor." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:380 -msgid "If you do this, all the code copied will be using spaces instead of tabs." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:382 -msgid "To convert the spaces to tabs in the script editor, click the \"edit\" menu and select \"Convert Indent To Tabs\". This will convert all the spaces into tabs. You can select \"Convert Indent To Spaces\" to convert tabs back into spaces." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:387 -msgid "First, we define some class variables to dictate how our player will move about the world." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:389 -msgid "Throughout this tutorial, **variables defined outside functions will be referred to as \"class variables\"**. This is because we can access any of these variables from any place in the script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:393 -msgid "Let's go through each of the class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:395 -msgid "``GRAVITY``: How strong gravity pulls us down." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:396 -msgid "``vel``: Our :ref:`KinematicBody `'s velocity." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:397 -msgid "``MAX_SPEED``: The fastest speed we can reach. Once we hit this speed, we will not go any faster." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:398 -msgid "``JUMP_SPEED``: How high we can jump." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:399 -msgid "``ACCEL``: How quickly we accelerate. The higher the value, the sooner we get to max speed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:400 -msgid "``DEACCEL``: How quickly we are going to decelerate. The higher the value, the sooner we will come to a complete stop." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:401 -msgid "``MAX_SLOPE_ANGLE``: The steepest angle our :ref:`KinematicBody ` will consider as a 'floor'." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:402 -msgid "``camera``: The :ref:`Camera ` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:403 -msgid "``rotation_helper``: A :ref:`Spatial ` node holding everything we want to rotate on the X axis (up and down)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:404 -msgid "``MOUSE_SENSITIVITY``: How sensitive the mouse is. I find a value of ``0.05`` works well for my mouse, but you may need to change it based on how sensitive your mouse is." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:406 -msgid "You can tweak many of these variables to get different results. For example, by lowering ``GRAVITY`` and/or increasing ``JUMP_SPEED`` you can get a more 'floaty' feeling character. Feel free to experiment!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:410 -msgid "You may have noticed that ``MOUSE_SENSITIVITY`` is written in all caps like the other constants, but ``MOUSE_SENSITIVITY`` is not a constant." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:412 -msgid "The reason behind this is we want to treat it like a constant variable (a variable that cannot change) throughout our script, but we want to be able to change the value later when we add customizable settings. So, in an effort to remind ourselves to treat it like a constant, it's named in all caps." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:417 -msgid "Now let's look at the ``_ready`` function:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:419 -msgid "First we get the ``camera`` and ``rotation_helper`` nodes and store them into their variables." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:421 -msgid "Then we need to set the mouse mode to captured, so the mouse cannot leave the game window." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:423 -msgid "This will hide the mouse and keep it at the center of the screen. We do this for two reasons: The first reason being we do not want the player to see their mouse cursor as they play." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:426 -msgid "The second reason is because we do not want the cursor to leave the game window. If the cursor leaves the game window there could be instances where the player clicks outside the window, and then the game would lose focus. To assure neither of these issues happens, we capture the mouse cursor." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:430 -msgid "See :ref:`Input documentation ` for the various mouse modes. We will only be using ``MOUSE_MODE_CAPTURED`` and ``MOUSE_MODE_VISIBLE`` in this tutorial series." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:435 -msgid "Next let's take a look at ``_physics_process``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:437 -msgid "All we're doing in ``_physics_process`` is calling two functions: ``process_input`` and ``process_movement``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:439 -msgid "``process_input`` will be where we store all the code relating to player input. We want to call it first, before anything else, so we have fresh player input to work with." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:442 -msgid "``process_movement`` is where we'll send all the data necessary to the :ref:`KinematicBody ` so it can move through the game world." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:447 -msgid "Let's look at ``process_input`` next:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:449 -msgid "First we set ``dir`` to an empty :ref:`Vector3 `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:451 -msgid "``dir`` will be used for storing the direction the player intends to move towards. Because we do not want the player's previous input to effect the player beyond a single ``process_movement`` call, we reset ``dir``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:454 -msgid "Next we get the camera's global transform and store it as well, into the ``cam_xform`` variable." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:456 -msgid "The reason we need the camera's global transform is so we can use its directional vectors. Many have found directional vectors confusing, so let's take a second to explain how they work:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:461 -msgid "World space can be defined as: The space in which all objects are placed in, relative to a constant origin point. Every object, no matter if it is 2D or 3D, has a position in world space." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:464 -msgid "To put it another way: world space is the space in a universe where every object's position, rotation, and scale can be measured by a single, known, fixed point called the origin." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:467 -msgid "In Godot, the origin is at position ``(0, 0, 0)`` with a rotation of ``(0, 0, 0)`` and a scale of ``(1, 1, 1)``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:469 -msgid "When you open up the Godot editor and select a :ref:`Spatial ` based node, a gizmo pops up. Each of the arrows points using world space directions by default." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:472 -msgid "If you want to move using the world space directional vectors, you'd do something like this:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:497 -msgid "Notice how we do not need to do any calculations to get world space directional vectors. We can define a few :ref:`Vector3 ` variables and input the values pointing in each direction." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:500 -msgid "Here is what world space looks like in 2D:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:502 -msgid "The following images are just examples. Each arrow/rectangle represents a directional vector" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:506 -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:561 -msgid "And here is what it looks like for 3D:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:510 -msgid "Notice how in both examples, the rotation of the node does not change the directional arrows. This is because world space is a constant. No matter how you translate, rotate, or scale an object, world space will *always point in the same direction*." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:514 -msgid "Local space is different, because it takes the rotation of the object into account." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:516 -msgid "Local space can be defined as follows: The space in which an object's position is the origin of the universe. Because the position of the origin can be at ``N`` many locations, the values derived from local space change with the position of the origin." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:521 -msgid "This question from Game Development Stack Exchange has a much better explanation of world space and local space." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:523 -msgid "https://gamedev.stackexchange.com/questions/65783/what-are-world-space-and-eye-space-in-game-development (Local space and eye space are essentially the same thing in this context)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:526 -msgid "To get a :ref:`Spatial ` node's local space, we need to get its :ref:`Transform `, so then we can get the :ref:`Basis ` from the :ref:`Transform `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:529 -msgid "Each :ref:`Basis ` has three vectors: ``X``, ``Y``, and ``Z``. Each of those vectors point towards each of the local space vectors coming from that object." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:532 -msgid "To use the :ref:`Spatial ` node's local directional vectors, we use this code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:557 -msgid "Here is what local space looks like in 2D:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:565 -msgid "Here is what the :ref:`Spatial ` gizmo shows when you are using local space mode. Notice how the arrows follow the rotation of the object on the left, which looks exactly the same as the 3D example for local space." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:569 -msgid "You can change between local and world space modes by pressing :kbd:`T` or the little cube button when you have a :ref:`Spatial ` based node selected." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:574 -msgid "Local vectors are confusing even for more experienced game developers, so do not worry if this all doesn't make a lot of sense. The key thing to remember about local vectors is that we are using local coordinates to get direction from the object's point of view, as opposed to using world vectors, which give direction from the world's point of view." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:580 -msgid "Okay, back to ``process_input``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:582 -msgid "Next we make a new variable called ``input_movement_vector`` and assign it to an empty :ref:`Vector2 `. We will use this to make a virtual axis of sorts, to map the player's input to movement." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:585 -msgid "This may seem overkill for just the keyboard, but this will make sense later when we add joypad input." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:587 -msgid "Based on which directional movement action is pressed, we add to or subtract from ``input_movement_vector``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:589 -msgid "After we've checked each of the directional movement actions, we normalize ``input_movement_vector``. This makes it where ``input_movement_vector``'s values are within a ``1`` radius unit circle." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:592 -msgid "Next we add the camera's local ``Z`` vector times ``input_movement_vector.y`` to ``dir``. This is so when the player presses forward or backwards, we add the camera's local ``Z`` axis so the player moves forward or backwards in relation to the camera." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:595 -msgid "Because the camera is rotated by ``-180`` degrees, we have to flip the ``Z`` directional vector. Normally forward would be the positive Z axis, so using ``basis.z.normalized()`` would work, but we are using ``-basis.z.normalized()`` because our camera's Z axis faces backwards in relation to the rest of the player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:600 -msgid "We do the same thing for the camera's local ``X`` vector, and instead of using ``input_movement_vector.y`` we instead use ``input_movement_vector.x``. This makes it where the player moves left/right in relation to the camera when the player presses left/right." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:603 -msgid "Next we check if the player is on the floor using :ref:`KinematicBody `'s ``is_on_floor`` function. If it is, then we check to see if the \"movement_jump\" action has just been pressed. If it has, then we set the player's ``Y`` velocity to ``JUMP_SPEED``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:607 -msgid "Because we're setting the Y velocity, the player will jump into the air." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:609 -msgid "Then we check for the ``ui_cancel`` action. This is so we can free/capture the mouse cursor when the ``escape`` button is pressed. We do this because otherwise we'd have no way to free the cursor, meaning it would be stuck until you terminate the runtime." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:613 -msgid "To free/capture the cursor, we check to see if the mouse is visible (freed) or not. If it is, we capture it, and if it's not, we make it visible (free it)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:615 -msgid "That's all we're doing right now for ``process_input``. We'll come back several times to this function as we add more complexities to our player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:619 -msgid "Now let's look at ``process_movement``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:621 -msgid "First we ensure that ``dir`` does not have any movement on the ``Y`` axis by setting its ``Y`` value to zero." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:623 -msgid "Next we normalize ``dir`` to ensure we're within a ``1`` radius unit circle. This makes it where we're moving at a constant speed regardless of whether the player is moving straight or diagonally. If we did not normalize, the player would move faster on the diagonal than when going straight." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:626 -msgid "Next we add gravity to the player by adding ``GRAVITY * delta`` to the player's ``Y`` velocity." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:628 -msgid "After that we assign the player's velocity to a new variable (called ``hvel``) and remove any movement on the ``Y`` axis." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:630 -msgid "Next we set a new variable (``target``) to the player's direction vector. Then we multiply that by the player's max speed so we know how far the player will move in the direction provided by ``dir``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:633 -msgid "After that we make a new variable for acceleration, named ``accel``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:635 -msgid "We then take the dot product of ``hvel`` to see if the player is moving according to ``hvel``. Remember, ``hvel`` does not have any ``Y`` velocity, meaning we are only checking if the player is moving forwards, backwards, left, or right." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:639 -msgid "If the player is moving according to ``hvel``, then we set ``accel`` to the ``ACCEL`` constant so the player will accelerate, otherwise we set ``accel`` to our ``DEACCEL`` constant so the player will decelerate." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:642 -msgid "Then we interpolate the horizontal velocity, set the player's ``X`` and ``Z`` velocity to the interpolated horizontal velocity, and call ``move_and_slide`` to let the :ref:`KinematicBody ` handle moving the player through the physics world." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:645 -msgid "All the code in ``process_movement`` is exactly the same as the movement code from the Kinematic Character demo!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:649 -msgid "The final function we have is the ``_input`` function, and thankfully it's fairly short:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:651 -msgid "First we make sure that the event we are dealing with is an :ref:`InputEventMouseMotion ` event. We also want to check if the cursor is captured, as we do not want to rotate if it is not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:654 -msgid "See :ref:`Mouse and input coordinates ` for a list of possible input events." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:657 -msgid "If the event is indeed a mouse motion event and the cursor is captured, we rotate based on the relative mouse motion provided by :ref:`InputEventMouseMotion `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:660 -msgid "First we rotate the ``rotation_helper`` node on the ``X`` axis, using the relative mouse motion's ``Y`` value, provided by :ref:`InputEventMouseMotion `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:663 -msgid "Then we rotate the entire :ref:`KinematicBody ` on the ``Y`` axis by the relative mouse motion's ``X`` value." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:665 -msgid "Godot converts relative mouse motion into a :ref:`Vector2 ` where mouse movement going up and down is ``1`` and ``-1`` respectively. Right and Left movement is ``1`` and ``-1`` respectively." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:669 -msgid "Because of how we are rotating the player, we multiply the relative mouse motion's ``X`` value by ``-1`` so mouse motion going left and right rotates the player left and right in the same direction." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:673 -msgid "Finally, we clamp the ``rotation_helper``'s ``X`` rotation to be between ``-70`` and ``70`` degrees so the player cannot rotate themselves upside down." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:676 -msgid "See :ref:`using transforms ` for more information on rotating transforms." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:680 -msgid "To test the code, open up the scene named ``Testing_Area.tscn``, if it's not already opened up. We will be using this scene as we go through the next few tutorial parts, so be sure to keep it open in one of your scene tabs." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:683 -msgid "Go ahead and test your code either by pressing :kbd:`F6` with ``Testing_Area.tscn`` as the open tab, by pressing the play button in the top right corner, or by pressing :kbd:`F5`. You should now be able to walk around, jump in the air, and look around using the mouse." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:689 -msgid "Giving the player a flash light and the option to sprint" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:691 -msgid "Before we get to making the weapons work, there are a couple more things we should add." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:693 -msgid "Many FPS games have an option to sprint and a flashlight. We can easily add these to our player, so let's do that!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:696 -msgid "First we need a few more class variables in our player script:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:717 -msgid "All the sprinting variables work exactly the same as the non sprinting variables with similar names." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:720 -msgid "``is_sprinting`` is a boolean to track whether the player is currently sprinting, and ``flashlight`` is a variable we will be using to hold the player's flash light node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:723 -msgid "Now we need to add a few lines of code, starting in ``_ready``. Add the following to ``_ready``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:734 -msgid "This gets the ``Flashlight`` node and assigns it to the ``flashlight`` variable." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:738 -msgid "Now we need to change some of the code in ``process_input``. Add the following somewhere in ``process_input``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:780 -msgid "Let's go over the additions:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:782 -msgid "We set ``is_sprinting`` to ``true`` when the player is holding down the ``movement_sprint`` action, and ``false`` when the ``movement_sprint`` action is released. In ``process_movement`` we'll add the code that makes the player faster when they sprint. Here in ``process_input`` we are just going to change the ``is_sprinting`` variable." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:786 -msgid "We do something similar to freeing/capturing the cursor for handling the flashlight. We first check to see if the ``flashlight`` action was just pressed. If it was, we then check to see if ``flashlight`` is visible in the scene tree. If it is, then we hide it, and if it's not, we show it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:791 -msgid "Now we need to change a couple things in ``process_movement``. First, replace ``target *= MAX_SPEED`` with the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:808 -msgid "Now instead of always multiplying ``target`` by ``MAX_SPEED``, we first check to see if the player is sprinting or not. If the player is sprinting, we instead multiply ``target`` by ``MAX_SPRINT_SPEED``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:811 -msgid "Now all that's left is to change the acceleration when sprinting. Change ``accel = ACCEL`` to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:828 -msgid "Now, when the player is sprinting, we'll use ``SPRINT_ACCEL`` instead of ``ACCEL``, which will accelerate the player faster." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:832 -msgid "You should now be able to sprint if you press :kbd:`Shift`, and can toggle the flash light on and off by pressing :kbd:`F`!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:834 -msgid "Go try it out! You can change the sprint-related class variables to make the player faster or slower when sprinting!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:837 -msgid "Final notes" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:841 -msgid "Whew! That was a lot of work. Now you have a fully working first person character!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:843 -msgid "In :ref:`doc_fps_tutorial_part_two` we will add some guns to our player character." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:845 -msgid "At this point we've recreated the Kinematic character demo from first person perspective with sprinting and a flash light!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:847 -msgid "Currently the player script would be at an ideal state for making all sorts of first person games. For example: Horror games, platformer games, adventure games, and more!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:850 -msgid "If you ever get lost, be sure to read over the code again!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_one.rst:852 -msgid "You can download the finished project for this part here: :download:`Godot_FPS_Part_1.zip `" -msgstr "" diff --git a/sphinx/templates/tutorials/3d/fps_tutorial/part_six.pot b/sphinx/templates/tutorials/3d/fps_tutorial/part_six.pot deleted file mode 100644 index 8d1a01aca2..0000000000 --- a/sphinx/templates/tutorials/3d/fps_tutorial/part_six.pot +++ /dev/null @@ -1,937 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:4 -msgid "Part 6" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:7 -msgid "Part overview" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:9 -msgid "In this part, we're going to add a main menu and pause menu, add a respawn system for the player, and change/move the sound system so we can use it from any script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:12 -msgid "This is the last part of the FPS tutorial; by the end of this, you will have a solid base to build amazing FPS games with Godot!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:16 -msgid "You are assumed to have finished :ref:`doc_fps_tutorial_part_five` before moving on to this part of the tutorial. The finished project from :ref:`doc_fps_tutorial_part_five` will be the starting project for part 6" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:19 -msgid "Let's get started!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:22 -msgid "Adding the main menu" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:24 -msgid "Firstly, open up ``Main_Menu.tscn`` and take a look at how the scene is set up." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:26 -msgid "The main menu is broken up into three different panels, each representing a different 'screen' of our main menu." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:29 -msgid "The ``Background_Animation`` node is just so the background of the menu is a bit more interesting than a solid color. It's a camera looking around the skybox, nothing fancy." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:32 -msgid "Feel free to expand all the nodes and see how they're set up. Remember to keep only ``Start_Menu`` visible when you're done, as that's the screen we want to show first when we enter the main menu." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:35 -msgid "Select ``Main_Menu`` (the root node) and create a new script called ``Main_Menu.gd``. Add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:122 -msgid "Most of the code here relates to making UIs, which is outside of the purpose of this tutorial series. **We're only going to look at the UI related code briefly.**" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:125 -msgid "See :ref:`doc_ui_main_menu` and the tutorials following for better ways to make GUIs and UIs!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:127 -msgid "Let's look at the class variables first." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:129 -msgid "``start_menu``: A variable to hold the ``Start_Menu`` :ref:`Panel `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:130 -msgid "``level_select_menu``: A variable to hold the ``Level_Select_Menu`` :ref:`Panel `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:131 -msgid "``options_menu``: A variable to hold the ``Options_Menu`` :ref:`Panel `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:132 -msgid "``testing_area_scene``: The path to the ``Testing_Area.tscn`` file, so we can change to it from this scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:133 -msgid "``space_level_scene``: The path to the ``Space_Level.tscn`` file, so we can change to it from this scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:134 -msgid "``ruins_level_scene``: The path to the ``Ruins_Level.tscn`` file, so we can change to it from this scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:136 -msgid "You'll have to set the paths to the correct files in the editor before testing this script! Otherwise it will not work!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:140 -msgid "Now let's go over ``_ready``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:142 -msgid "Firstly, we get all the :ref:`Panel ` nodes and assign them to the proper variables." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:144 -msgid "Next, we connect all the buttons ``pressed`` signals to their respective ``[panel_name_here]_button_pressed`` functions." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:146 -msgid "We then set the mouse mode to ``MOUSE_MODE_VISIBLE`` to ensure whenever the player returns to this scene, the mouse will be visible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:148 -msgid "Then we get a singleton, called ``Globals``. We then set the values for the :ref:`HSlider ` nodes so their values line up with the mouse and joypad sensitivity in the singleton." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:151 -msgid "We have not made the ``Globals`` singleton yet, so don't worry! We're going to make it soon!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:155 -msgid "In ``start_menu_button_pressed``, we check to see which button is pressed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:157 -msgid "Based on the button pressed, we either change the currently visible panel, quit the application, or open the Godot website." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:161 -msgid "In ``level_select_menu_button_pressed``, we check to see which button is pressed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:163 -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:175 -msgid "If the ``back`` button has been pressed, we change the currently visible panels to return to the main menu." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:165 -msgid "If one of the scene changing buttons is pressed, we fist call ``set_mouse_and_joypad_sensitivity`` so the singleton (``Globals.gd``) has the values from the :ref:`HSlider ` nodes. Then, we tell the singleton to change nodes using its ``load_new_scene`` function, passing in the file path of the scene the player has selected." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:169 -msgid "Don't worry about the singleton, we'll get there soon!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:173 -msgid "In ``options_menu_button_pressed``, we check to see which button is pressed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:177 -msgid "If the ``fullscreen`` button is pressed, we toggle the :ref:`OS `'s full screen mode by setting it to the flipped version of its current value." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:179 -msgid "If the ``vsync`` button is pressed, we set the :ref:`OS `'s Vsync based on the state of the Vsync check button." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:183 -msgid "Finally, lets take a look at ``set_mouse_and_joypad_sensitivity``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:185 -msgid "Firstly, we get the ``Globals`` singleton and assign it to a local variable." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:187 -msgid "We then set the ``mouse_sensitivity`` and ``joypad_sensitivity`` variables to the values in their respective :ref:`HSlider ` node counterparts." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:190 -msgid "Making the ``Globals`` singleton" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:192 -msgid "Now, for all this to work, we need to create the ``Globals`` singleton. Make a new script in the ``Script`` tab and call it ``Globals.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:194 -msgid "To make the ``Globals`` singleton, go to the ``Script`` tab in the editor, then click ``New`` and a ``Create Script`` box will appear, leave everything unchanged except for the ``Path`` where you need to insert the script's name ``Globals.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:196 -msgid "Add the following to ``Globals.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:211 -msgid "As you can see, it's quite small and simple. As this part progresses, we will keep adding more complex logic to ``Globals.gd``, but for now, all it is doing is holding two class variables, and abstract defining how we change scenes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:214 -msgid "``mouse_sensitivity``: The current sensitivity for our mouse, so we can load it in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:215 -msgid "``joypad_sensitivity``: The current sensitivity for our joypad, so we can load it in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:217 -msgid "Right now, all we will be using ``Globals.gd`` for is a way to carry variables across scenes. Because the sensitivities of our mouse and joypad are stored in ``Globals.gd``, any changes we make in one scene (like in ``Options_Menu``) will affect the sensitivity for the player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:220 -msgid "All we're doing in ``load_new_scene`` is calling :ref:`SceneTree `'s ``change_scene`` function, passing in the scene path given in ``load_new_scene``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:222 -msgid "That's all the code needed for ``Globals.gd`` right now! Before we can test the main menu, we first need to set ``Globals.gd`` as an autoload script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:224 -msgid "Open up the ``Project Settings`` and click the ``AutoLoad`` tab." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:228 -msgid "Then select the path to ``Globals.gd`` in the ``Path`` field by clicking the button (``..``) beside it. Make sure the name in the ``Node Name`` field is ``Globals``. If you have everything like in the picture above, then press ``Add``!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:231 -msgid "This will make ``Globals.gd`` a singleton/autoload script, which will allow us to access it from any script, in any scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:233 -msgid "For more information on singleton/autoload scripts, see :ref:`doc_singletons_autoload`." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:235 -msgid "Now that ``Globals.gd`` is a singleton/autoload script, you can test the main menu!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:237 -msgid "You may want to change the main scene from ``Testing_Area.tscn`` to ``Main_Menu.tscn`` so when we export the game the player will start at the main menu. You can do this through the ``Project Settings``, under the ``General`` tab. Then in the ``Application`` category, click the ``Run`` subcategory and you can change the main scene by changing the value in ``Main Scene``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:241 -msgid "You'll have to set the paths to the correct files in ``Main_Menu`` in the editor before testing the main menu! Otherwise you will not be able to change scenes from the level select menu/screen." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:245 -msgid "Adding the debug menu" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:247 -msgid "Now, let's add a simple debugging scene so we can track things like FPS (Frames Per Second) in-game. Open up ``Debug_Display.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:249 -msgid "You can see it's a :ref:`Panel ` positioned in the top right corner of the screen. It has three :ref:`Labels `, one for displaying the FPS at which the game is running, one for showing on what OS the game is running, and a label for showing with which Godot version the game is running." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:252 -msgid "Let's add the code needed to fill these :ref:`Labels `. Select ``Debug_Display`` and create a new script called ``Debug_Display.gd``. Add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:265 -msgid "Let's go over what this script does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:269 -msgid "In ``_ready``, we set the ``OS_Label``'s text to the name provided by :ref:`OS ` using the ``get_name`` function. This will return the name of the OS (or Operating System) for which Godot was compiled. For example, when you are running Windows, it will return ``Windows``, while when you are running Linux, it will return ``X11``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:273 -msgid "Then, we set the ``Engine_Label``'s text to the version info provided by ``Engine.get_version_info``. ``Engine.get_version_info`` returns a dictionary full of useful information about the version of Godot which is currently running. We only care about the string version, for this label at least, so we get the string and assign that as the ``text`` in ``Engine_Label``. See :ref:`Engine ` for more information on the values ``get_version_info`` returns." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:277 -msgid "In ``_process``, we set the text of the ``FPS_Label`` to ``Engine.get_frames_per_second``, but because ``get_frames_per_second`` returns an integer, we have to cast it to a string using ``str`` before we can add it to the :ref:`Label `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:282 -msgid "Now let's jump back to ``Main_Menu.gd`` and change the following in ``options_menu_button_pressed``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:289 -msgid "to this instead:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:296 -msgid "This will call a new function called ``set_debug_display`` in our singleton, so let's add that next!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:300 -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:391 -msgid "Open up ``Globals.gd`` and add the following class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:314 -msgid "``canvas_layer``: A canvas layer so the GUI/UI created in ``Globals.gd`` is always drawn on top." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:315 -msgid "``DEBUG_DISPLAY``: The debug display scene we worked on earlier." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:316 -msgid "``debug_display``: A variable to hold the debug display when/if there is one." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:318 -msgid "Now that we have the class variables defined, we need to add a few lines to ``_ready`` so ``Globals.gd`` will have a canvas layer to use (which we will store in ``canvas_layer``). Change ``_ready`` to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:327 -msgid "Now in ``_ready``, we create a new canvas layer, assign it to ``canvas_layer`` and add it as a child. Because ``Globals.gd`` is an autoload/singleton, Godot will make a :ref:`Node ` when the game is launched, and it will have ``Globals.gd`` attached to it. Since Godot makes a :ref:`Node `, we can treat ``Globals.gd`` like any other node with regard to adding/removing children nodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:331 -msgid "The reason we're adding a :ref:`CanvasLayer ` is so all our GUI and UI nodes we instance/spawn in ``Globals.gd`` are always drawn on top of everything else." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:334 -msgid "When adding nodes to a singleton/autoload, you have to be careful not to lose reference to any of the child nodes. This is because nodes will not be freed/destroyed when you change the active scene, meaning you can run into memory problems if you are instancing/spawning lots of nodes and you are not freeing them." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:340 -msgid "Now we need to add ``set_debug_display`` to ``Globals.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:354 -msgid "Let's go over what's happening." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:356 -msgid "First we check to see if ``Globals.gd`` is trying to turn on the debug display, or turn it off." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:358 -msgid "If ``Globals.gd`` is turning off the display, we then check to see if ``debug_display`` is not equal to ``null``. If ``debug_display`` is not equal to ``null``, then ``Globals.gd`` must have a debug display currently active. If ``Globals.gd`` has a debug display active, we free it using ``queue_free`` and then assign ``debug_display`` to ``null``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:361 -msgid "If ``Globals.gd`` is turning on the display, we then check to make sure ``Globals.gd`` do not already have a debug display active. We do this by making sure ``debug_display`` is equal to ``null``. If ``debug_display`` is ``null``, we instance a new ``DEBUG_DISPLAY_SCENE``, and add it as a child of ``canvas_layer``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:367 -msgid "With that done, we can now toggle the debug display on and off by switching the :ref:`CheckButton ` in the ``Options_Menu`` panel. Go give it a try!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:369 -msgid "Notice how the debug display stays even when you change scenes from the ``Main_Menu.tscn`` to another scene (like ``Testing_Area.tscn``). This is the beauty of instancing/spawning nodes in a singleton/autoload and adding them as children to the singleton/autoload. Any of the nodes added as children of the singleton/autoload will stay for as long as the game is running, without any additional work on our part!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:374 -msgid "Adding a pause menu" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:376 -msgid "Let's add a pause menu so we can return to the main menu when we press the ``ui_cancel`` action." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:378 -msgid "Open up ``Pause_Popup.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:380 -msgid "Notice how the root node in ``Pause_Popup`` is a :ref:`WindowDialog `; :ref:`WindowDialog ` inherits from :ref:`Popup `, which means :ref:`WindowDialog ` can act like a popup." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:383 -msgid "Select ``Pause_Popup`` and scroll down all the way till you get to the ``Pause`` menu in the inspector. Notice how the pause mode is set to ``process`` instead of ``inherit`` like it is normally set by default. This makes it so it will continue to process even when the game is paused, which we need in order to interact with the UI elements." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:387 -msgid "Now that we've looked at how ``Pause_Popup.tscn`` is set up, let's write the code to make it work. Normally, we'd attach a script to the root node of the scene, ``Pause_Popup`` in this case, but since we'll need to receive a couple of signals in ``Globals.gd``, we'll write all the code for the popup there." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:399 -msgid "``MAIN_MENU_PATH``: The path to the main menu scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:400 -msgid "``POPUP_SCENE``: The pop up scene we looked at earlier." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:401 -msgid "``popup``: A variable to hold the pop up scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:403 -msgid "Now we need to add ``_process`` to ``Globals.gd`` so it can respond when the ``ui_cancel`` action is pressed. Add the following to ``_process``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:424 -msgid "Let's go over what's happening here." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:428 -msgid "Firstly, we check to see if the ``ui_cancel`` action is pressed. Then, we check to make sure ``Globals.gd`` does not already have a ``popup`` open by checking to see if ``popup`` is equal to ``null``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:431 -msgid "If ``Globals.gd`` do not have a pop-up open, we instance ``POPUP_SCENE`` and assign it to ``popup``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:433 -msgid "We then get the quit button and assign its ``pressed`` signal to ``popup_quit``, which we will be adding shortly." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:435 -msgid "Next, we assign both the ``popup_hide`` signal from the :ref:`WindowDialog ` and the ``pressed`` signal from the resume button to ``popup_closed``, which we will be adding shortly." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:438 -msgid "Then, we add ``popup`` as a child of ``canvas_layer`` so it's drawn on top. We then tell ``popup`` to pop up at the center of the screen using ``popup_centered``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:440 -msgid "Next, we make sure the mouse mode is ``MOUSE_MODE_VISIBLE`` so the player can interact with the pop-up. If we did not do this, the player would not be able to interact with the pop up in any scene where the mouse mode is ``MOUSE_MODE_CAPTURED``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:443 -msgid "Finally, we pause the entire :ref:`SceneTree `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:445 -msgid "For more information on pausing in Godot, see :ref:`doc_pausing_games`" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:449 -msgid "Now, we need to add the functions to which we've connected the signals. Let's add ``popup_closed`` first." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:451 -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:466 -msgid "Add the following to ``Globals.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:462 -msgid "``popup_closed`` will resume the game and destroy the pop-up if there is one." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:464 -msgid "``popup_quit`` is similar, but we're also making sure the mouse is visible and changing scenes to the title screen." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:481 -msgid "``popup_quit`` will resume the game, set the mouse mode to ``MOUSE_MODE_VISIBLE`` to ensure the mouse is visible in the main menu, destroy the pop-up if there is one, and change scenes to the main menu." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:486 -msgid "Before we're ready to test the pop-up, we should change one thing in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:488 -msgid "Open up ``Player.gd`` and in ``process_input``, change the code for capturing/freeing the cursor to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:490 -msgid "Instead of:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:501 -msgid "You will leave only:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:509 -msgid "Now, instead of capturing/freeing the mouse, we check whether the current mouse mode is ``MOUSE_MODE_VISIBLE``. If it is, we set it back to ``MOUSE_MODE_CAPTURED``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:512 -msgid "Because the pop-up makes the mouse mode ``MOUSE_MODE_VISIBLE`` whenever you pause, we no longer have to worry about freeing and capturing the cursor in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:516 -msgid "Now the pause menu pop-up is finished. You can now pause at any point in the game and return to the main menu!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:519 -msgid "Starting the respawn system" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:521 -msgid "Since the player can lose all their health, it would be ideal if the player died and respawned too, so let's add that next!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:523 -msgid "Firstly, open up ``Player.tscn`` and expand ``HUD``. Notice how there is a :ref:`ColorRect ` called ``Death_Screen``. When the player dies, we're going to make ``Death_Screen`` visible, and show them how long they have to wait before the player is able to respawn." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:526 -msgid "Open up ``Player.gd`` and add the following class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:536 -msgid "``RESPAWN_TIME``: The amount of time (in seconds) it takes to respawn." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:537 -msgid "``dead_time``: A variable to track how long the player has been dead." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:538 -msgid "``is_dead``: A variable to track whether or not the player is currently dead." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:539 -msgid "``globals``: A variable to hold the ``Globals.gd`` singleton." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:543 -msgid "We now need to add a couple lines to ``_ready``, so we can use ``Globals.gd`` in ``Player.gd``. Add the following to ``_ready``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:551 -msgid "Now we're getting the ``Globals.gd`` singleton and assigning it to ``globals``. We also set the player's global position by setting the origin in the player's global :ref:`Transform ` to the position returned by ``globals.get_respawn_position``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:554 -msgid "Don't worry, we will be adding ``get_respawn_position`` further below!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:558 -msgid "Next, we need to make a few changes to ``_physics_process``. Change ``_physics_process`` to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:576 -msgid "Now the player will not be processing input or movement input when the player is dead. We are also now calling ``process_respawn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:578 -msgid "The ``if !is_dead:`` expression is equivalent and works in the same way as the expression ``if is_dead == false:``. And by removing the ``!`` sign from the expression we obtain the opposite expression ``if is_dead == true:``. It is just a shorter way of writing the same code functionality." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:580 -msgid "We have not made ``process_respawn`` yet, so let's change that." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:584 -msgid "Let's add ``process_respawn``. Add the following to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:643 -msgid "Let's go through what this function is doing." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:647 -msgid "Firstly, we check whether the player has just died by checking if ``health`` is less than or equal to ``0`` and ``is_dead`` is ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:649 -msgid "If the player has just died, we disable the collision shapes for the player. We do this to make sure the player is not blocking anything with their dead body." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:651 -msgid "Next, we set ``changing_weapon`` to ``true`` and set ``changing_weapon_name`` to ``UNARMED``. This is so, if the player is using a weapon, it is put away when they dies." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:654 -msgid "We then make the ``Death_Screen`` :ref:`ColorRect ` visible so the player gets a nice grey overlay over everything when they have died. We then make the rest of the UI, the ``Panel`` and ``Crosshair`` nodes, invisible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:657 -msgid "Next, we set ``dead_time`` to ``RESPAWN_TIME`` so we can start counting down how long the player has been dead. We also set ``is_dead`` to ``true`` so we know the player has died." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:659 -msgid "If the player is holding an object when they died, we need to throw it. We first check whether the player is holding an object or not. If the player is holding a object, we throw it using the same code as the throwing code we added in :ref:`doc_fps_tutorial_part_five`." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:662 -msgid "The ``\\n`` combination from the expression ``You have died\\n`` is a command used to display the text following after it on a new line below. This is always useful when you want to nicely group displayed text in multiple lines so it looks better and is more readable by the players of your games." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:666 -msgid "Then we check whether the player is dead. If so, we then remove ``delta`` from ``dead_time``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:668 -msgid "We then make a new variable called ``dead_time_pretty``, where we convert ``dead_time`` to a string, using only the first three characters starting from the left. This gives the player a nice looking string showing how much time the player has left to wait before the player can respawn." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:671 -msgid "We then change the :ref:`Label ` in ``Death_Screen`` to show how much time the player has left." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:673 -msgid "Next we check to see if the player has waited long enough and can respawn. We do this by checking to see if ``dead_time`` is ``0`` or less." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:675 -msgid "If the player has waited long enough to respawn, we set the player's position to a new respawn position provided by ``get_respawn_position``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:677 -msgid "We then enable both of the player's collision shapes so the player can collide again with the environment." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:679 -msgid "Next, we make the ``Death_Screen`` invisible and make the rest of the UI, the ``Panel`` and ``Crosshair`` nodes, visible again." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:681 -msgid "We then go through each weapon and call its ``reset_weapon`` function, which we will add soon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:683 -msgid "Then, we reset ``health`` to ``100``, ``grenade_amounts`` to its default values, and change ``current_grenade`` to ``Grenade``. This effectively resets these variables to their default values." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:686 -msgid "Finally, we set ``is_dead`` to ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:690 -msgid "Before we leave ``Player.gd``, we need to add one quick thing to ``_input``. Add the following at the beginning of ``_input``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:697 -msgid "Now, when the player is dead, they cannot look around with the mouse." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:700 -msgid "Finishing the respawn system" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:702 -msgid "Firstly, let's open ``Weapon_Pistol.gd`` and add the ``reset_weapon`` function. Add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:710 -msgid "Now, when we call ``reset_weapon``, the ammo in the pistol and the ammo in the spares will be reset to their default values." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:712 -msgid "Now let's add ``reset_weapon`` in ``Weapon_Rifle.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:720 -msgid "And add the following to ``Weapon_Knife.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:728 -msgid "Now all the weapons will reset when the player dies." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:732 -msgid "Now we need to add a few things to ``Globals.gd``. Firstly, add the following class variable:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:738 -msgid "``respawn_points``: A variable to hold all the respawn points in a level" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:740 -msgid "Because we're getting a random spawn point each time, we need to randomize the number generator. Add the following to ``_ready``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:746 -msgid "``randomize`` will get us a new random seed so we get a (relatively) random string of numbers when we use any of the random functions." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:748 -msgid "Now let's add ``get_respawn_position`` to ``Globals.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:759 -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:941 -msgid "Let's go over what this function does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:763 -msgid "Firstly, we check if ``Globals.gd`` has any ``respawn_points`` by checking whether ``respawn_points`` is ``null`` or not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:765 -msgid "If ``respawn_points`` is ``null``, we return a position of empty :ref:`Vector 3 ` with the position ``(0, 0, 0)``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:767 -msgid "If ``respawn_points`` is not ``null``, we then get a random number between ``0`` and the number of elements we have in ``respawn_points``, minus ``1`` since most programming languages, including ``GDScript``, start counting from ``0`` when you are accessing elements in a list." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:770 -msgid "We then return the position of the :ref:`Spatial ` node at ``respawn_point`` position in ``respawn_points``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:774 -msgid "Before we are done with ``Globals.gd``, we need to add the following to ``load_new_scene``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:780 -msgid "We set ``respawn_points`` to ``null`` so when/if the player gets to a level with no respawn points, we do not respawn the player at the respawn points that were in the level prior." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:785 -msgid "Now all we need is a way to set the respawn points. Open up ``Ruins_Level.tscn`` and select ``Spawn_Points``. Add a new script called ``Respawn_Point_Setter.gd`` and attach it to ``Spawn_Points``. Add the following to ``Respawn_Point_Setter.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:796 -msgid "Now, when a node with ``Respawn_Point_Setter.gd`` has its ``_ready`` function called, all the children nodes of the node with ``Respawn_Point_Setter.gd``, ``Spawn_Points`` in the case of ``Ruins_Level.tscn``, will be added to ``respawn_points`` in ``Globals.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:800 -msgid "Any node with ``Respawn_Point_Setter.gd`` has to be above the player in the :ref:`SceneTree ` so the respawn points are set before the player needs them in the player's ``_ready`` function." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:805 -msgid "Now, when the player dies, they will respawn after waiting ``4`` seconds!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:807 -msgid "No spawn points are already set up for any of the levels besides ``Ruins_Level.tscn``! Adding spawn points to ``Space_Level.tscn`` is left as an exercise for the reader." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:811 -msgid "Writing a sound system we can use anywhere" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:813 -msgid "Finally, let's make a sound system so we can play sounds from anywhere, without having to use the player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:815 -msgid "Firstly, open up ``SimpleAudioPlayer.gd`` and change it to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:859 -msgid "There are several changes from the old version, first and foremost being we are no longer storing the sound files in ``SimpleAudioPlayer.gd`` anymore. This is much better for performance since we're no longer loading each audio clip when we create a sound, but instead we are forcing an audio stream to be passed in to ``play_sound``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:863 -msgid "Another change is we have a new class variable called ``should_loop``. Instead of just destroying the audio player every time it's finished, we instead want to check and see if the audio player is set to loop or not. This allows us to have audio like looping background music without having to spawn a new audio player with the music when the old one is finished." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:865 -msgid "Finally, instead of being instanced/spawned in ``Player.gd``, the audio player is instead going to be spawned in ``Globals.gd`` so we can create sounds from any scene. Now the audio player stores ``Globals.gd`` singleton so when the audio player is destroyed, we can also remove it from a list in ``Globals.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:868 -msgid "Let's go over the changes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:872 -msgid "For the class variables, we removed all the ``audio_[insert name here]`` variables since we will instead have these passed in from ``Globals.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:874 -msgid "We also added two new class variables, ``should_loop`` and ``globals``. We'll use ``should_loop`` to tell whether the audio player should loop when the sound has finished, and ``globals`` will hold the ``Globals.gd`` singleton." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:877 -msgid "The only change in ``_ready`` is now audio player is getting the ``Globals.gd`` singleton and assigning it to ``globals``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:879 -msgid "``play_sound`` now expects an audio stream, named ``audio_stream``, to be passed in, instead of ``sound_name``. Instead of checking the sound name and setting the stream for the audio player, we instead check to make sure an audio stream was passed in. If an audio stream was not passed in, we print an error message, remove the audio player from a list in the ``Globals.gd`` singleton called ``created_audio``, and then free the audio player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:883 -msgid "Finally, in ``sound_finished`` we first check to see if the audio player is supposed to loop or not using ``should_loop``. If the audio player is supposed to loop, we play the sound again from the start, at position ``0.0``. If the audio player is not supposed to loop, we remove the audio player from a list in the ``Globals.gd`` singleton called ``created_audio``, and then free the audio player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:889 -msgid "Now that we've finished our changes to ``SimpleAudioPlayer.gd``, we now need to turn our attention to ``Globals.gd``. First, add the following class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:905 -msgid "Let's go over these global variables." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:907 -msgid "``audio_clips``: A dictionary holding all the audio clips ``Globals.gd`` can play." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:908 -msgid "``SIMPLE_AUDIO_PLAYER_SCENE``: The simple audio player scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:909 -msgid "``created_audio``: A list to hold all the simple audio players ``Globals.gd`` has created." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:911 -msgid "If you want to add additional audio, you need to add it to ``audio_clips``. No audio files are provided in this tutorial, so you will have to provide your own." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:914 -msgid "One site I'd recommend is **GameSounds.xyz**. I'm using the Gamemaster audio gun sound pack included in the Sonniss' GDC Game Audio bundle for 2017. The tracks I've used (with some minor editing) are as follows:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:918 -msgid "gun_revolver_pistol_shot_04," -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:919 -msgid "gun_semi_auto_rifle_cock_02," -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:920 -msgid "gun_submachine_auto_shot_00_automatic_preview_01" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:924 -msgid "Now we need to add a new function called ``play_sound`` to ``Globals.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:943 -msgid "Firstly, we check whether ``Globals.gd`` has an audio clip with the name ``sound_name`` in ``audio_clips``. If it does not, we print an error message." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:945 -msgid "If ``Globals.gd`` has an audio clip with the name ``sound_name``, we then instance/spawn a new ``SIMPLE_AUDIO_PLAYER_SCENE`` and assign it to ``new_audio``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:947 -msgid "We then set ``should_loop``, and add ``new_audio`` as a child of ``Globals.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:949 -msgid "Remember, we have to be careful adding nodes to a singleton, since these nodes will not be destroyed when changing scenes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:951 -msgid "We add the ``new_audio`` into the ``created_audio`` list to hold all created audios." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:953 -msgid "We then call ``play_sound``, passing in the audio clip associated with ``sound_name`` and the sound position." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:957 -msgid "Before we leave ``Globals.gd``, we need to add a few lines of code to ``load_new_scene`` so when the player changes scenes, all the audio is destroyed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:959 -msgid "Add the following to ``load_new_scene``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:968 -msgid "Now, before ``Globals.gd`` changes scenes, it goes through each simple audio player in ``created_sounds`` and frees/destroys them. Once ``Globals.gd`` has gone through all the sounds in ``created_audio``, we clear ``created_audio`` so it no longer holds any references to any (now freed/destroyed) simple audio players." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:973 -msgid "Let's change ``create_sound`` in ``Player.gd`` to use this new system. First, remove ``simple_audio_player`` from ``Player.gd``'s class variables since we will no longer be directly instancing/spawning sounds in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:976 -msgid "Now, change ``create_sound`` to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:983 -msgid "Now, whenever ``create_sound`` is called, we simply call ``play_sound`` in ``Globals.gd``, passing in all the arguments received." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:987 -msgid "Now all the sounds in our FPS can be played from anywhere. All we have to do is get the ``Globals.gd`` singleton, and call ``play_sound``, pass in the name of the sound we want to play, whether we want it to loop or not, and the position from which to play the sound." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:990 -msgid "For example, if you want to play an explosion sound when the grenade explodes you'd need to add a new sound to ``audio_clips`` in ``Globals.gd``, get the ``Globals.gd`` singleton, and then you just need to add something like ``globals.play_sound(\"explosion\", false, global_transform.origin)`` in the grenades ``_process`` function, right after the grenade damages all the bodies within its blast radius." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:996 -msgid "Final notes" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1000 -msgid "Now you have a fully working single player FPS!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1002 -msgid "At this point, you have a good base to build more complicated FPS games." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1004 -msgid "If you ever get lost, be sure to read over the code again!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1006 -msgid "You can download the finished project for the entire tutorial here: :download:`Godot_FPS_Part_6.zip `" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1008 -msgid "The finished project source files contain the same code, just written in a different order. This is because the finished project source files are what the tutorial is based on." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1011 -msgid "The finished project code was written in the order that features were created, not necessarily in a order that is ideal for learning." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1014 -msgid "Other than that, the source is exactly the same, just with helpful comments explaining what each part does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1017 -msgid "The finished project source is hosted on GitHub as well: https://github.com/TwistedTwigleg/Godot_FPS_Tutorial" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1019 -msgid "**Please note that the code in GitHub may or may not be in sync with the tutorial in the documentation**." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1021 -msgid "The code in the documentation is likely better managed and/or more up to date. If you are unsure of which to use, use the project(s) provided in the documentation, as they are maintained by the Godot community." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1024 -msgid "You can download all the ``.blend`` files used in this tutorial here: :download:`Godot_FPS_BlenderFiles.zip `" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1026 -msgid "All assets provided in the started assets (unless otherwise noted) were **originally created by TwistedTwigleg, with changes/additions by the Godot community.** All original assets provided for this tutorial are released under the ``MIT`` license." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1029 -msgid "Feel free to use these assets however you want! All original assets belong to the Godot community, with the other assets belonging to those listed below:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1031 -msgid "The skybox is created by **StumpyStrust** and can be found at OpenGameArt.org. https://opengameart.org/content/space-skyboxes-0 . The skybox is licensed under the ``CC0`` license." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1034 -msgid "The font used is **Titillium-Regular**, and is licensed under the ``SIL Open Font License, Version 1.1``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1036 -msgid "The skybox was converted to a 360 equirectangular image using this tool: https://www.360toolkit.co/convert-cubemap-to-spherical-equirectangular.html" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1038 -msgid "While no sounds are provided, you can find many game ready sounds at https://gamesounds.xyz/" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_six.rst:1040 -msgid "**OpenGameArt.org, 360toolkit.co, the creator(s) of Titillium-Regular, StumpyStrust, and GameSounds.xyz are in no way involved in this tutorial.**" -msgstr "" diff --git a/sphinx/templates/tutorials/3d/fps_tutorial/part_three.pot b/sphinx/templates/tutorials/3d/fps_tutorial/part_three.pot deleted file mode 100644 index c58cad434b..0000000000 --- a/sphinx/templates/tutorials/3d/fps_tutorial/part_three.pot +++ /dev/null @@ -1,595 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:4 -msgid "Part 3" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:7 -msgid "Part overview" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:9 -msgid "In this part, we will be limiting the player's weapons by giving them ammo. We will also be giving the player the ability to reload, and we will be adding sounds when the weapons fire." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:15 -msgid "You are assumed to have finished :ref:`doc_fps_tutorial_part_two` before moving on to this part of the tutorial. The finished project from :ref:`doc_fps_tutorial_part_two` will be the starting project for part 3" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:18 -msgid "Let's get started!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:22 -msgid "Changing levels" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:24 -msgid "Now that we have a fully working FPS, let's move to a more FPS-like level." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:26 -msgid "Open up ``Space_Level.tscn`` (``assets/Space_Level_Objects/Space_Level.tscn``) and/or ``Ruins_Level.tscn`` (``assets/Ruin_Level_Objects/Ruins_Level.tscn``)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:29 -msgid "``Space_Level.tscn`` and ``Ruins_Level.tscn`` are complete custom FPS levels created for the purpose of this tutorial. Press ``Play Current Scene`` button, or :kbd:`F6` on keyboard, and give each a try." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:33 -msgid "``Space_Level.tscn`` is more graphically demanding of the GPU than ``Ruins_Level.tscn``. If your computer is struggling to render ``Space_Level.tscn``, try using ``Ruins_Level.tscn`` instead." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:38 -msgid "Due to Godot updates since this tutorial was published, if you are using Godot 3.2 or later, you may need to apply the following changes to the Space Level and Ruins Level scenes:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:40 -msgid "Open ``res://assets/Space_Level_Objects/Space_Level.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:41 -msgid "In the Scene tree dock, select the **Floor_and_Celing** node. In the Inspector dock, if the Mesh Library field under GridMap is ``[empty]``, set it to ``Space_Level_Mesh_Lib.tres`` by dragging the file ``res://assets/Space_Level_Objects/Space_Level_Mesh_Lib.tres`` from the FileSystem dock to that field." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:42 -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:46 -msgid "Do the same for the **Walls** node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:44 -msgid "Open ``res://assets/Ruin_Level_Objects/Ruins_Level.tscn``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:45 -msgid "In the Scene tree dock, select the **Floor** node. In the Inspector dock, if the Mesh Library field under GridMap is ``[empty]``, set it to ``Ruin_Level_Mesh_Lib.tres`` by dragging the file ``res://assets/Ruin_Level_Objects/Ruin_Level_Mesh_Lib.tres`` from the FileSystem dock into that field." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:48 -msgid "You might have noticed there are several :ref:`RigidBody ` nodes placed throughout the level. We can place ``RigidBody_hit_test.gd`` on them and then they will react to being hit with bullets, so let's do that!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:51 -msgid "Follow the instructions below for either (or both) of the scenes you want to use" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:87 -msgid "Now you can fire at all the rigid bodies in either level and they will react to bullets hitting them!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:90 -msgid "Adding ammo" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:92 -msgid "Now that the player has working guns, let's give them a limited amount of ammo." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:94 -msgid "Firstly, we need to define a few variables in each of our weapon scripts." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:96 -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:205 -msgid "Open up ``Weapon_Pistol.gd`` and add the following class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:104 -msgid "``ammo_in_weapon``: The amount of ammo currently in the pistol" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:105 -msgid "``spare_ammo``: The amount of ammo we have left in reserve for the pistol" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:106 -msgid "``AMMO_IN_MAG``: The amount of ammo in a fully reloaded weapon/magazine" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:108 -msgid "Now all we need to do is add a single line of code to ``fire_weapon``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:110 -msgid "Add the following right under ``Clone.BULLET_DAMAGE = DAMAGE``: ``ammo_in_weapon -= 1``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:112 -msgid "This will remove one from ``ammo_in_weapon`` every time the player fires. Notice we're not checking to see if the player has enough ammo or not in ``fire_weapon``. Instead, we're going to check to see if the player has enough ammo in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:117 -msgid "Now we need to add ammo for both the rifle and the knife." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:119 -msgid "You may be wondering why we are adding ammo for the knife given it does not consume any ammunition. The reason we want to add ammo to the knife is so we have a consistent interface for all our weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:122 -msgid "If we did not add ammo variables for the knife, we would have to add checks for the knife. By adding the ammo variables to the knife, we don't need to worry about whether or not all our weapons have the same variables." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:125 -msgid "Add the following class variables to ``Weapon_Rifle.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:133 -msgid "And then add the following to ``fire_weapon``: ``ammo_in_weapon -= 1``. Make sure that ``ammo_in_weapon -= 1`` is outside of the ``if ray.is_colliding()`` check so the player loses ammo regardless of whether the player hit something or not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:136 -msgid "Now all that's left is the knife. Add the following to ``Weapon_Knife.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:144 -msgid "Because the knife does not consume ammo, that is all we need to add." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:148 -msgid "Now we need to change one thing in ``Player.gd``, that is to say," -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:150 -msgid "how we're firing the weapons in ``process_input``. Change the code for firing weapons to the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:165 -msgid "Now the weapons have a limited amount of ammo, and will stop firing when the player runs out." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:169 -msgid "Ideally, we'd like to let the player be able to see how much ammo is left. Let's make a new function called ``process_UI``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:171 -msgid "First, add ``process_UI(delta)`` to ``_physics_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:173 -msgid "Now add the following to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:185 -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:247 -msgid "Let's go over what's happening:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:187 -msgid "Firstly, we check to see if the current weapon is either ``UNARMED`` or ``KNIFE``. If it is, we change the ``UI_status_label``'s text to only show the player's health since ``UNARMED`` and ``KNIFE`` do not consume ammo." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:190 -msgid "If the player is using a weapon that consumes ammo, we first get the weapon node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:192 -msgid "Then we change ``UI_status_label``'s text to show the player's health, along with how much ammo the player has in the weapon and how much spare ammo the player has for that weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:196 -msgid "Now we can see how much ammo the player has through the HUD." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:199 -msgid "Adding reloading to the weapons" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:201 -msgid "Now that the player can run out of ammo, we need a way to let the player fill them back up. Let's add reloading next!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:203 -msgid "For reloading, we need to add a few more variables and a function to every weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:214 -msgid "``CAN_RELOAD``: A boolean to track whether this weapon has the ability to reload" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:215 -msgid "``CAN_REFILL``: A boolean to track whether we can refill this weapon's spare ammo. We will not be using ``CAN_REFILL`` in this part, but we will in the next part!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:216 -msgid "``RELOADING_ANIM_NAME``: The name of the reloading animation for this weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:218 -msgid "Now we need to add a function for handling reloading. Add the following function to ``Weapon_Pistol.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:249 -msgid "First we define a variable to see whether or not this weapon can reload." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:251 -msgid "Then we check to see if the player is in this weapon's idle animation state because we only want to be able to reload when the player is not firing, equipping, or unequipping." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:254 -msgid "Next we check to see if the player has spare ammo, and if the ammo already in the weapon is equal to a fully reloaded weapon. This way we can ensure the player cannot reload when the player has no ammo or when the weapon is already full of ammo." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:257 -msgid "If we can still reload, then we calculate the amount of ammo needed to reload the weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:259 -msgid "If the player has enough ammo to fill the weapon, we remove the ammo needed from ``spare_ammo`` and then set ``ammo_in_weapon`` to a full weapon/magazine." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:261 -msgid "If the player does not have enough ammo, we add all the ammo left in ``spare_ammo``, and then set ``spare_ammo`` to ``0``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:263 -msgid "Next we play the reloading animation for this weapon, and then return ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:265 -msgid "If the player could not reload, we return ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:269 -msgid "Now we need to add reloading to the rifle. Open up ``Weapon_Rifle.gd`` and add the following class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:278 -msgid "These variables are exactly the same as the pistol, just with ``RELOADING_ANIM_NAME`` changed to the rifle's reloading animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:280 -msgid "Now we need to add ``reload_weapon`` to ``Weapon_Rifle.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:309 -msgid "This code is exactly the same as the one for the pistol." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:313 -msgid "The last bit we need to do for the weapons is add 'reloading' to the knife. Add the following class variables to ``Weapon_Knife.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:322 -msgid "Since we both cannot reload or refill a knife, we set both constants to ``false``. We also define ``RELOADING_ANIM_NAME`` as an empty string, since the knife has no reloading animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:325 -msgid "Now we need to add ``reloading_weapon``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:332 -msgid "Since we cannot reload a knife, we always return ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:335 -msgid "Adding reloading to the player" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:337 -msgid "Now we need to add a few things to ``Player.gd``. First we need to define a new class variable:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:343 -msgid "``reloading_weapon``: A variable to track whether or not the player is currently trying to reload." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:346 -msgid "Next we need to add another function call to ``_physics_process``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:348 -msgid "Add ``process_reloading(delta)`` to ``_physics_process``. Now ``_physics_process`` should look something like this:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:359 -msgid "Now we need to add ``process_reloading``. Add the following function to ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:370 -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:421 -msgid "Let's go over what's happening here." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:372 -msgid "Firstly, we check to make sure the player is trying to reload." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:374 -msgid "If the player is trying to reload, we then get the current weapon. If the current weapon does not equal ``null``, we call its ``reload_weapon`` function." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:376 -msgid "If the current weapon is equal to ``null``, then the current weapon is ``UNARMED``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:378 -msgid "Finally, we set ``reloading_weapon`` to ``false`` because, regardless of whether the player successfully reloaded, we've tried reloading and no longer need to keep trying." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:383 -msgid "Before we can let the player reload, we need to change a few things in ``process_input``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:385 -msgid "The first thing we need to change is in the code for changing weapons. We need to add an additional check (``if reloading_weapon == false:``) to see if the player is reloading:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:396 -msgid "This makes it so the player cannot change weapons if the player is reloading." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:398 -msgid "Now we need to add the code to trigger a reload when the player pushes the ``reload`` action. Add the following code to ``process_input``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:423 -msgid "First we make sure the player is not reloading already, nor is the player trying to change weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:425 -msgid "Then we check to see if the ``reload`` action has been pressed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:427 -msgid "If the player has pressed ``reload``, we then get the current weapon and check to make sure it is not ``null``. Then we check to see whether the weapon can reload or not using its ``CAN_RELOAD`` constant." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:430 -msgid "If the weapon can reload, we then get the current animation state, and make a variable for tracking whether the player is already reloading or not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:432 -msgid "We then go through every weapon to make sure the player is not already playing that weapon's reloading animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:434 -msgid "If the player is not reloading any weapon, we set ``reloading_weapon`` to ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:438 -msgid "One thing I like to add is where the weapon will reload itself if you try to fire it and it's out of ammo." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:440 -msgid "We also need to add an additional if check (``is_reloading_weapon == false:``) so the player cannot fire the current weapon while reloading." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:443 -msgid "Let's change our firing code in ``process_input`` so it reloads when trying to fire an empty weapon:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:461 -msgid "Now we check to make sure the player is not reloading before we fire the weapon, and when we have ``0`` or less ammo in the current weapon, we set ``reloading_weapon`` to ``true`` if the player tries to fire." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:464 -msgid "This will make it so the player will try to reload when attempting to fire an empty weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:468 -msgid "With that done, the player can now reload! Give it a try! Now you can fire all the spare ammo for each weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:471 -msgid "Adding sounds" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:473 -msgid "Finally, let's add some sounds that accompany the player firing, reloading and changing weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:475 -msgid "There are no game sounds provided in this tutorial (for legal reasons). https://gamesounds.xyz/ is a collection of **\"royalty free or public domain music and sounds suitable for games\"**. I used Gamemaster's Gun Sound Pack, which can be found in the Sonniss.com GDC 2017 Game Audio Bundle." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:479 -msgid "Open up ``Simple_Audio_Player.tscn``. It is simply a :ref:`Spatial ` with an :ref:`AudioStreamPlayer ` as its child." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:481 -msgid "The reason this is called a 'simple' audio player is because we are not taking performance into account and because the code is designed to provide sound in the simplest way possible." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:484 -msgid "If you want to use 3D audio, so it sounds like it's coming from a location in 3D space, right click the :ref:`AudioStreamPlayer ` and select \"Change type\"." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:487 -msgid "This will open the node browser. Navigate to :ref:`AudioStreamPlayer3D ` and select \"change\". In the source for this tutorial, we will be using :ref:`AudioStreamPlayer `, but you can optionally use :ref:`AudioStreamPlayer3D ` if you desire, and the code provided below will work regardless of which one you chose." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:492 -msgid "Create a new script and call it ``Simple_Audio_Player.gd``. Attach it to the :ref:`Spatial ` in ``Simple_Audio_Player.tscn`` and insert the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:544 -msgid "By setting ``position`` to ``null`` by default in ``play_sound``, we are making it an optional argument, meaning ``position`` doesn't necessarily have to be passed in to call ``play_sound``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:547 -msgid "Let's go over what's happening here:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:551 -msgid "In ``_ready``, we get the :ref:`AudioStreamPlayer ` and connect its ``finished`` signal to the ``destroy_self`` function. It doesn't matter if it's an :ref:`AudioStreamPlayer ` or :ref:`AudioStreamPlayer3D ` node, as they both have the finished signal. To make sure it is not playing any sounds, we call ``stop`` on the :ref:`AudioStreamPlayer `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:555 -msgid "Make sure your sound files are **not** set to loop! If it is set to loop, the sounds will continue to play infinitely and the script will not work!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:558 -msgid "The ``play_sound`` function is what we will be calling from ``Player.gd``. We check if the sound is one of the three possible sounds, and if it is one of the three sounds we set the audio stream in :ref:`AudioStreamPlayer ` to the correct sound." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:562 -msgid "If it is an unknown sound, we print an error message to the console and free the audio player." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:564 -msgid "If you are using an :ref:`AudioStreamPlayer3D `, remove the ``#`` to set the position of the audio player node so it plays at the correct position." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:567 -msgid "Finally, we tell the :ref:`AudioStreamPlayer ` to play." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:569 -msgid "When the :ref:`AudioStreamPlayer ` is finished playing the sound, it will call ``destroy_self`` because we connected the ``finished`` signal in ``_ready``. We stop the :ref:`AudioStreamPlayer ` and free the audio player to save on resources." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:573 -msgid "This system is extremely simple and has some major flaws:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:575 -msgid "One flaw is we have to pass in a string value to play a sound. While it is relatively simple to remember the names of the three sounds, it can be increasingly complex when you have more sounds. Ideally, we'd place these sounds in some sort of container with exposed variables so we do not have to remember the name(s) of each sound effect we want to play." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:580 -msgid "Another flaw is we cannot play looping sounds effects, nor background music, easily with this system. Because we cannot play looping sounds, certain effects, like footstep sounds, are harder to accomplish because we then have to keep track of whether or not there is a sound effect and whether or not we need to continue playing it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:585 -msgid "One of the biggest flaws with this system is we can only play sounds from ``Player.gd``. Ideally we'd like to be able to play sounds from any script at any time." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:590 -msgid "With that done, let's open up ``Player.gd`` again. First we need to load the ``Simple_Audio_Player.tscn``. Place the following code in the class variables section of the script:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:597 -msgid "Now we need to instance the simple audio player when we need it, and then call its ``play_sound`` function and pass the name of the sound we want to play. To make the process simpler, let's create a ``create_sound`` function in ``Player.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:609 -msgid "Let's walk through what this function does:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:613 -msgid "The first line instances the ``Simple_Audio_Player.tscn`` scene and assigns it to a variable named ``audio_clone``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:616 -msgid "The second line gets the scene root, and this has a large (though safe) assumption." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:618 -msgid "We first get this node's :ref:`SceneTree `, and then access the root node, which in this case is the :ref:`Viewport ` this entire game is running under. Then we get the first child of the :ref:`Viewport `, which in our case happens to be the root node in ``Test_Area.tscn`` or any of the other provided levels. **We are making a huge assumption that the first child of the root node is the root scene that the player is under, which may not always be the case**." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:624 -msgid "If this doesn't make sense to you, don't worry too much about it. The second line of code only does not work reliably if you have multiple scenes loaded as children of the root node at a time, which will rarely happen for most projects and will not be happening in this tutorial series. This is only potentially a issue depending on how you handle scene loading." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:628 -msgid "The third line adds our newly created ``Simple_Audio_Player`` scene to be a child of the scene root. This works exactly the same as when we are spawning bullets." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:631 -msgid "Finally, we call the ``play_sound`` function and pass in the arguments passed in to ``create_sound``. This will call ``Simple_Audio_Player.gd``'s ``play_sound`` function with the passed in arguments." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:636 -msgid "Now all that is left is playing the sounds when we want to. Let's add sound to the pistol first!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:638 -msgid "Open up ``Weapon_Pistol.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:640 -msgid "Now, we want to make a noise when the player fires the pistol, so add the following to the end of the ``fire_weapon`` function:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:646 -msgid "Now when the player fires the pistol, we'll play the ``Pistol_shot`` sound." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:648 -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:670 -msgid "To make a sound when the player reloads, we need to add the following right under ``player_node.animation_manager.set_animation(RELOADING_ANIM_NAME)`` in the ``reload_weapon`` function:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:655 -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:677 -msgid "Now when the player reloads, we'll play the ``Gun_cock`` sound." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:659 -msgid "Now let's add sounds to the rifle. Open up ``Weapon_Rifle.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:662 -msgid "To play sounds when the rifle is fired, add the following to the end of the ``fire_weapon`` function:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:668 -msgid "Now when the player fires the rifle, we'll play the ``Rifle_shot`` sound." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:680 -msgid "Final notes" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:684 -msgid "Now you have weapons with limited ammo that play sounds when you fire them!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:686 -msgid "At this point, we have all the basics of an FPS game working. There are still a few things that would be nice to add, and we're going to add them in the next three parts!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:689 -msgid "For example, right now we have no way to add ammo to our spares, so we'll eventually run out. Also, we don't have anything to shoot at outside of the :ref:`RigidBody ` nodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:692 -msgid "In :ref:`doc_fps_tutorial_part_four` we'll add some targets to shoot at, along with some health and ammo pick ups! We're also going to add joypad support, so we can play with wired Xbox 360 controllers!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:695 -msgid "If you ever get lost, be sure to read over the code again!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_three.rst:697 -msgid "You can download the finished project for this part here: :download:`Godot_FPS_Part_3.zip `" -msgstr "" diff --git a/sphinx/templates/tutorials/3d/fps_tutorial/part_two.pot b/sphinx/templates/tutorials/3d/fps_tutorial/part_two.pot deleted file mode 100644 index fe862ba268..0000000000 --- a/sphinx/templates/tutorials/3d/fps_tutorial/part_two.pot +++ /dev/null @@ -1,1105 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:4 -msgid "Part 2" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:7 -msgid "Part overview" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:9 -msgid "In this part we will be giving our player weapons to play with." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:13 -msgid "By the end of this part, you will have a player that can fire a pistol, rifle, and attack using a knife. The player will also now have animations with transitions, and the weapons will interact with objects in the environment." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:17 -msgid "You are assumed to have finished :ref:`doc_fps_tutorial_part_one` before moving on to this part of the tutorial. The finished project from :ref:`doc_fps_tutorial_part_one` will be the starting project for part 2" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:20 -msgid "Let's get started!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:23 -msgid "Making a system to handle animations" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:25 -msgid "First we need a way to handle changing animations. Open up ``Player.tscn`` and select the :ref:`AnimationPlayer ` Node (``Player`` -> ``Rotation_Helper`` -> ``Model`` -> ``Animation_Player``)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:28 -msgid "Create a new script called ``AnimationPlayer_Manager.gd`` and attach that to the :ref:`AnimationPlayer `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:30 -msgid "Add the following code to ``AnimationPlayer_Manager.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:152 -msgid "Lets go over what this script is doing:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:156 -msgid "Lets start with this script's class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:158 -msgid "``states``: A dictionary for holding our animation states. (Further explanation below)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:159 -msgid "``animation_speeds``: A dictionary for holding all the speeds at which we want to play our animations." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:160 -msgid "``current_state``: A variable for holding the name of the animation state we are currently in." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:161 -msgid "``callback_function``: A variable for holding the callback function. (Further explanation below)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:163 -msgid "If you are familiar with state machines, then you may have noticed that ``states`` is structured like a basic state machine. Here is roughly how ``states`` is set up:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:166 -msgid "``states`` is a dictionary with the key being the name of the current state, and the value being an array holding all the animations (states) we can transition to. For example, if we are currently in the ``Idle_unarmed`` state, we can only transition to ``Knife_equip``, ``Pistol_equip``, ``Rifle_equip``, and ``Idle_unarmed``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:171 -msgid "If we try to transition to a state that is not included in the possible transitions states for the state we are in, then we get a warning message and the animation does not change. We can also automatically transition from some states into others, as will be explained further below in ``animation_ended``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:175 -msgid "For the sake of keeping this tutorial simple, we are not using a 'proper' state machine. If you are interested to know more about state machines, see the following articles:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:179 -msgid "(Python example) https://dev.to/karn/building-a-simple-state-machine-in-python" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:180 -msgid "(C# example) https://www.codeproject.com/Articles/489136/UnderstandingplusandplusImplementingplusStateplusP" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:181 -msgid "(Wiki article) https://en.wikipedia.org/wiki/Finite-state_machine" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:183 -msgid "``animation_speeds`` is how fast each animation will play. Some of the animations are a little slow and in an effort to make everything look smooth, we need to play them at faster speeds." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:186 -msgid "Notice that all of the firing animations are faster than their normal speed. Remember this for later!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:188 -msgid "``current_state`` will hold the name of the animation state we are currently in." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:190 -msgid "Finally, ``callback_function`` will be a :ref:`FuncRef ` passed in by the player for spawning bullets at the proper frame of animation. A :ref:`FuncRef ` allows us to pass in a function as an argument, effectively allowing us to call a function from another script, which is how we will use it later." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:196 -msgid "Now let's look at ``_ready``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:198 -msgid "First we are setting our animation to ``Idle_unarmed`` using the ``set_animation`` function, so we for sure start in that animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:201 -msgid "Next we connect the ``animation_finished`` signal to this script and assign it to call ``animation_ended``. This means whenever an animation is finished, ``animation_ended`` will be called." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:206 -msgid "Let's look at ``set_animation`` next." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:208 -msgid "``set_animation`` changes the animation to the animation named ``animation_name`` *if* we can transition to it. In other words, if the animation state we are currently in has the passed in animation state name in ``states``, then we will change to that animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:212 -msgid "Firstly, we check if the passed in animation name is the same name as the animation currently playing. If they are the same, then we write a warning to the console and return ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:215 -msgid "Secondly, we see if :ref:`AnimationPlayer ` has the animation with the name ``animation_name`` using ``has_animation``. If it does not, we return ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:218 -msgid "Thirdly, we check whether ``current_state`` is set. If we have a state in ``current_state``, then we get all the possible states we can transition to." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:220 -msgid "If the animation name is in the list of possible transitions, we set ``current_state`` to the passed in animation (``animation_name``), tell :ref:`AnimationPlayer ` to play the animation with a blend time of ``-1`` at the speed set in ``animation_speeds`` and return ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:224 -msgid "Blend time is how long to blend/mix the two animations together." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:226 -msgid "By putting in a value of ``-1``, the new animation instantly plays, overriding whatever animation is already playing." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:228 -msgid "If you put in a value of ``1``, for one second the new animation will play with increasing strength, blending the two animations together for one second before playing only the new animation. This leads to a smooth transition between animations, which looks great when you are changing from a walking animation to a running animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:232 -msgid "We set the blend time to ``-1`` because we want to instantly change animations." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:236 -msgid "Now let's look at ``animation_ended``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:238 -msgid "``animation_ended`` is the function that will be called by :ref:`AnimationPlayer ` when it's done playing an animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:241 -msgid "For certain animation states, we may need to transition into another state when it's finished. To handle this, we check for every possible animation state. If we need to, we will transition into another state." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:244 -msgid "If you are using your own animated models, make sure that none of the animations are set to loop. Looping animations do not send the ``animation_finished`` signal when they reach the end of the animation and are about to loop again." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:248 -msgid "The transitions in ``animation_ended`` would ideally be part of the data in ``states``, but in an effort to make the tutorial easier to understand, we'll hard code each state transition in ``animation_ended``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:254 -msgid "Finally, there is ``animation_callback``. This function will be called by a call method track in our animations. If we have a :ref:`FuncRef ` assigned to ``callback_function``, then we call that passed in function. If we do not have a :ref:`FuncRef ` assigned to ``callback_function``, we print out a warning to the console." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:258 -msgid "Try running ``Testing_Area.tscn`` to make sure there are no runtime issues. If the game runs but nothing seems to have changed, then everything is working correctly." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:262 -msgid "Getting the animations ready" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:264 -msgid "Now that we have a working animation manager, we need to call it from our player script. Before that, though, we need to set some animation callback tracks in our firing animations." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:267 -msgid "Open up ``Player.tscn`` if you don't have it open and navigate to the :ref:`AnimationPlayer ` node (``Player`` -> ``Rotation_Helper`` -> ``Model`` -> ``Animation_Player``)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:270 -msgid "We need to attach a call method track to three of our animations: The firing animation for the pistol, rifle, and knife. Let's start with the pistol. Click the animation drop down list and select \"Pistol_fire\"." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:273 -msgid "Now scroll down to the bottom of the list of animation tracks. The final item in the list should read ``Armature/Skeleton:Left_UpperPointer``. Now above the list, click the \"Add track\" button, to the left of the time line" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:278 -msgid "This will bring up a window with a few choices. We want to add a call method track, so click the option that reads \"Call Method Track\". This will open a window showing the entire node tree. Navigate to the :ref:`AnimationPlayer ` node, select it, and press OK." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:284 -msgid "Now at the bottom of list of animation tracks you will have a green track that reads \"AnimationPlayer\". Now we need to add the point where we want to call our callback function. Scrub the timeline until you reach the point where the muzzle starts to flash." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:288 -msgid "The timeline is the window where all the points in our animation are stored. Each of the little points represents a point of animation data." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:291 -msgid "To actually preview the \"Pistol_fire\" animation, select the :ref:`Camera ` node underneath Rotation Helper and check the \"Preview\" box underneath Perspective in the top-left corner." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:295 -msgid "Scrubbing the timeline means moving ourselves through the animation. So when we say \"scrub the timeline until you reach a point\", what we mean is move through the animation window until you reach the point on the timeline." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:299 -msgid "Also, the muzzle of a gun is the end point where the bullet comes out. The muzzle flash is the flash of light that escapes the muzzle when a bullet is fired. The muzzle is also sometimes referred to as the barrel of the gun." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:303 -msgid "For finer control when scrubbing the timeline, press :kbd:`Ctrl` and scroll forward with the mouse wheel to zoom in. Scrolling backwards will zoom out." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:306 -msgid "You can also change how the timeline scrubbing snaps by changing the value in ``Step (s)`` to a lower/higher value." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:308 -msgid "Once you get to a point you like, right click on the row for \"Animation Player\" and press ``Insert Key``. In the empty name field, enter ``animation_callback`` and press :kbd:`Enter`." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:314 -msgid "Now when we are playing this animation the call method track will be triggered at that specific point of the animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:318 -msgid "Let's repeat the process for the rifle and knife firing animations!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:320 -msgid "Because the process is exactly the same as the pistol, the process is going to explained in a little less depth. Follow the steps from above if you get lost! It is exactly the same, just on a different animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:323 -msgid "Go to the \"Rifle_fire\" animation from the animation drop down. Add the call method track once you reach the bottom of the animation track list by clicking the \"Add Track\" button above the list. Find the point where the muzzle starts to flash and right click and press ``Insert Key`` to add a call method track point at that position on the track." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:327 -msgid "Type \"animation_callback\" into the name field of the pop up which opened and press :kbd:`Enter`." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:329 -msgid "Now we need to apply the callback method track to the knife animation. Select the \"Knife_fire\" animation and scroll to the bottom of the animation tracks. Click the \"Add Track\" button above the list and add a method track. Next find a point around the first third of the animation to place the animation callback method point at." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:333 -msgid "We will not actually be firing the knife, and the animation is a stabbing animation rather than a firing one. For this tutorial we are reusing the gun firing logic for our knife, so the animation has been named in a style that is consistent with the other animations." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:337 -msgid "From there right click on the timeline and click \"Insert Key\". Put \"animation_callback\" into the name field and press :kbd:`Enter`." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:339 -msgid "Be sure to save your work!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:341 -msgid "With that done, we are almost ready to start adding the ability to fire to our player script! We need to set up one last scene: The scene for our bullet object." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:345 -msgid "Creating the bullet scene" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:347 -msgid "There are several ways to handle a gun's bullets in video games. In this tutorial series, we will be exploring two of the more common ways: Objects, and raycasts." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:352 -msgid "One of the two ways is using a bullet object. This will be an object that travels through the world and handles its own collision code. In this method we create/spawn a bullet object in the direction our gun is facing, and then it travels forward." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:356 -msgid "There are several advantages to this method. The first being we do not have to store the bullets in our player. We can simply create the bullet and then move on, and the bullet itself will handle checking for collisions, sending the proper signal(s) to the object it collides with, and destroying itself." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:359 -msgid "Another advantage is we can have more complex bullet movement. If we want to make the bullet fall ever so slightly as time goes on, we can make the bullet controlling script slowly push the bullet towards the ground. Using an object also makes the bullet take time to reach its target, it doesn't instantly hit whatever it's pointed at. This feels more realistic because nothing in real life moves instantly from one point to another." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:363 -msgid "One of the huge disadvantages is performance. While having each bullet calculate their own paths and handle their own collision allows for a lot of flexibility, it comes at the cost of performance. With this method we are calculating every bullet's movement every step, and while this may not be a problem for a few dozen bullets, it can become a huge problem when you potentially have several hundred bullets." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:367 -msgid "Despite the performance hit, many first person shooters include some form of object bullets. Rocket launchers are a prime example because in many first person shooters, rockets do not just instantly explode at their target position. You can also find bullets as objects many times with grenades because they generally bounce around the world before exploding." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:371 -msgid "While I cannot say for sure this is the case, these games *probably* use bullet objects in some form or another: (These are entirely from my observations. **They may be entirely wrong**. I have never worked on **any** of the following games)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:374 -msgid "Halo (Rocket launchers, fragmentation grenades, sniper rifles, brute shot, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:375 -msgid "Destiny (Rocket launchers, grenades, fusion rifles, sniper rifles, super moves, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:376 -msgid "Call of Duty (Rocket launchers, grenades, ballistic knives, crossbows, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:377 -msgid "Battlefield (Rocket launchers, grenades, claymores, mortars, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:379 -msgid "Another disadvantage with bullet objects is networking. Bullet objects have to sync the positions (at least) with all the clients that are connected to the server." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:382 -msgid "While we are not implementing any form of networking (as that would be in its own entire tutorial series), it is a consideration to keep in mind when creating your first person shooter, especially if you plan on adding some form of networking in the future." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:387 -msgid "The other way of handling bullet collisions we will be looking at is raycasting." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:389 -msgid "This method is extremely common in guns that have fast moving bullets that rarely change trajectory over time." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:391 -msgid "Instead of creating a bullet object and sending it through space, we instead send a ray starting from the barrel/muzzle of the gun forwards. We set the raycast's origin to the starting position of the bullet, and based on the length we can adjust how far the bullet 'travels' through space." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:394 -msgid "While I cannot say for sure this is the case, these games *probably* use raycasts in some form or another: (These are entirely from my observations. **They may be entirely wrong**. I have never worked on **any** of the following games)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:397 -msgid "Halo (Assault rifles, DMRs, battle rifles, covenant carbine, spartan laser, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:398 -msgid "Destiny (Auto rifles, pulse rifles, scout rifles, hand cannons, machine guns, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:399 -msgid "Call of Duty (Assault rifles, light machine guns, sub machine guns, pistols, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:400 -msgid "Battlefield (Assault rifles, SMGs, carbines, pistols, and more)" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:402 -msgid "One huge advantage of this method is that it's light on performance. Sending a couple hundred rays through space is *much* easier for the computer to calculate than sending a couple hundred bullet objects." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:406 -msgid "Another advantage is we can instantly know if we've hit something or not exactly when we call for it. For networking this is important because we do not need to sync the bullet movements over the Internet, we only need to send whether or not the raycast hit." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:409 -msgid "Raycasting does have some disadvantages, though. One major disadvantage is we cannot easily cast a ray in anything but a linear line. This means we can only fire in a straight line for however long our ray length is. You can create the illusion of bullet movement by casting multiple rays at different positions, but not only is this hard to implement in code, it is also heavier on performance." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:413 -msgid "Another disadvantage is we cannot see the bullet. With bullet objects we can actually see the bullet travel through space if we attach a mesh to it, but because raycasts happen instantly, we do not have a decent way of showing the bullets. You could draw a line from the origin of the raycast to the point where the raycast collided, and that is one popular way of showing raycasts. Another way is simply not drawing the raycast at all, because theoretically the bullets move so fast our eyes could not see it anyway." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:420 -msgid "Let's get the bullet object set up. This is what our pistol will create when the \"Pistol_fire\" animation callback function is called." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:423 -msgid "Open up ``Bullet_Scene.tscn``. The scene contains :ref:`Spatial ` node called bullet, with a :ref:`MeshInstance ` and an :ref:`Area ` with a :ref:`CollisionShape ` children to it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:427 -msgid "Create a new script called ``Bullet_script.gd`` and attach it to the ``Bullet`` :ref:`Spatial `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:429 -msgid "We are going to move the entire bullet object at the root (``Bullet``). We will be using the :ref:`Area ` to check whether or not we've collided with something" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:431 -msgid "Why are we using an :ref:`Area ` and not a :ref:`RigidBody `? The main reason we're not using a :ref:`RigidBody ` is because we do not want the bullet to interact with other :ref:`RigidBody ` nodes. By using an :ref:`Area ` we are ensuring that none of the other :ref:`RigidBody ` nodes, including other bullets, will be effected." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:435 -msgid "Another reason is simply because it is easier to detect collisions with an :ref:`Area `!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:437 -msgid "Here's the script that will control our bullet:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:473 -msgid "Let's go through the script:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:477 -msgid "First we define a few class variables:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:479 -msgid "``BULLET_SPEED``: The speed at which the bullet travels." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:480 -msgid "``BULLET_DAMAGE``: The damage the bullet will cause to anything with which it collides." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:481 -msgid "``KILL_TIMER``: How long the bullet can last without hitting anything." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:482 -msgid "``timer``: A float for tracking how long the bullet has been alive." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:483 -msgid "``hit_something``: A boolean for tracking whether or not we've hit something." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:485 -msgid "With the exception of ``timer`` and ``hit_something``, all of these variables change how the bullet interacts with the world." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:488 -msgid "The reason we are using a kill timer is so we do not have a case where we get a bullet travelling forever. By using a kill timer, we can ensure that no bullets will travel forever and consume resources." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:492 -msgid "As in :ref:`doc_fps_tutorial_part_one`, we have a couple all uppercase class variables. The reason behind this is the same as the reason given in :ref:`doc_fps_tutorial_part_one`: We want to treat these variables like constants, but we want to be able to change them. In this case we will later need to change the damage and speed of these bullets, so we need them to be variables and not constants." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:499 -msgid "In ``_ready`` we set the area's ``body_entered`` signal to ourself so that it calls the ``collided`` function when a body enters the area." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:504 -msgid "``_physics_process`` gets the bullet's local ``Z`` axis. If you look at the scene in local mode, you will find that the bullet faces the positive local ``Z`` axis." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:507 -msgid "Next we translate the entire bullet by that forward direction, multiplying in our speed and delta time." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:509 -msgid "After that we add delta time to our timer and check whether the timer has reached a value as big or greater than our ``KILL_TIME`` constant. If it has, we use ``queue_free`` to free the bullet." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:514 -msgid "In ``collided`` we check whether we've hit something yet." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:516 -msgid "Remember that ``collided`` is only called when a body has entered the :ref:`Area ` node. If the bullet has not already collided with something, we then proceed to check if the body the bullet has collided with has a function/method called ``bullet_hit``. If it does, we call it and pass in the bullet's damage and the bullet's global transform so we can get the bullet's rotation and position." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:521 -msgid "in ``collided``, the passed in body can be a :ref:`StaticBody `, :ref:`RigidBody `, or :ref:`KinematicBody `" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:524 -msgid "We set the Bullet's ``hit_something`` variable to ``true`` because regardless of whether or not the body that the bullet collided with has the ``bullet_hit`` function/method, it has hit something and so we need to make sure the bullet does not hit anything else." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:527 -msgid "Then we free the bullet using ``queue_free``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:529 -msgid "You may be wondering why we even have a ``hit_something`` variable if we free the bullet using ``queue_free`` as soon as it hits something." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:532 -msgid "The reason we need to track whether we've hit something or not is because ``queue_free`` does not immediately free the node, so the bullet could collide with another body before Godot has a chance to free it. By tracking whether the bullet has hit something, we can make sure that the bullet will only hit one object." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:540 -msgid "Before we start programming the player again, let's take a quick look at ``Player.tscn``. Open up ``Player.tscn`` again." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:543 -msgid "Expand ``Rotation_Helper`` and notice how it has two nodes: ``Gun_Fire_Points`` and ``Gun_Aim_Point``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:546 -msgid "``Gun_aim_point`` is the point that the bullets will be aiming at. Notice how it is lined up with the center of the screen and pulled a distance forward on the Z axis. ``Gun_aim_point`` will serve as the point where the bullets will for sure collide with as it goes along." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:551 -msgid "There is a invisible mesh instance for debugging purposes. The mesh is a small sphere that visually shows at which target the bullets will be aiming." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:554 -msgid "Open up ``Gun_Fire_Points`` and you'll find three more :ref:`Spatial ` nodes, one for each weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:557 -msgid "Open up ``Rifle_Point`` and you'll find a :ref:`Raycast ` node. This is where we will be sending the raycasts for our rifle's bullets. The length of the raycast will dictate how far our bullets will travel." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:561 -msgid "We are using a :ref:`Raycast ` node to handle the rifle's bullet because we want to fire lots of bullets quickly. If we use bullet objects, it is quite possible we could run into performance issues on older machines." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:565 -msgid "If you are wondering from where the positions of the points came, they are the rough positions of the ends of each weapon. You can see this by going to ``AnimationPlayer``, selecting one of the firing animations and scrubbing through the timeline. The point for each weapon should mostly line up with the end of each weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:571 -msgid "Open up ``Knife_Point`` and you'll find an :ref:`Area ` node. We are using an :ref:`Area ` for the knife because we only care for all the bodies close to us, and because our knife does not fire into space. If we were making a throwing knife, we would likely spawn a bullet object that looks like a knife." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:576 -msgid "Finally, we have ``Pistol_Point``. This is the point where we will be creating/instancing our bullet objects. We do not need any additional nodes here, as the bullet handles all of its own collision detection." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:580 -msgid "Now that we've seen how we will handle our other weapons, and where we will spawn the bullets, let's start working on making them work." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:583 -msgid "You can also look at the HUD nodes if you want. There is nothing fancy there and other than using a single :ref:`Label `, we will not be touching any of those nodes. Check :ref:`doc_design_interfaces_with_the_control_nodes` for a tutorial on using GUI nodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:589 -msgid "Creating the first weapon" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:591 -msgid "Lets write the code for each of our weapons, starting with the pistol." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:593 -msgid "Select ``Pistol_Point`` (``Player`` -> ``Rotation_Helper`` -> ``Gun_Fire_Points`` -> ``Pistol_Point``) and create a new script called ``Weapon_Pistol.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:595 -msgid "Add the following code to ``Weapon_Pistol.gd``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:646 -msgid "Let's go over how the script works." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:650 -msgid "First we define some class variables we'll need in the script:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:652 -msgid "``DAMAGE``: The amount of damage a single bullet does." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:653 -msgid "``IDLE_ANIM_NAME``: The name of the pistol's idle animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:654 -msgid "``FIRE_ANIM_NAME``: The name of the pistol's fire animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:655 -msgid "``is_weapon_enabled``: A variable for checking whether this weapon is in use/enabled." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:656 -msgid "``bullet_scene``: The bullet scene we worked on earlier." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:657 -msgid "``player_node``: A variable to hold ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:659 -msgid "The reason we define most of these variables is so we can use them in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:661 -msgid "Each of the weapons we'll make will have all these variables (minus ``bullet_scene``) so we have a consistent interface to interact with in ``Player.gd``. By using the same variables/functions in each weapon, we can interact with them without having to know which weapon we are using, which makes our code much more modular because we can add weapons without having to change much of the code in ``Player.gd`` and it will just work." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:666 -msgid "We could write all the code in ``Player.gd``, but then ``Player.gd`` will get increasingly harder to manage as we add weapons. By using a modular design with a consistent interface, we can keep ``Player.gd`` nice and neat, while also making it easier to add/remove/modify weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:671 -msgid "In ``_ready`` we simply pass over it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:673 -msgid "There is one thing of note though, an assumption that we'll fill in ``Player.gd`` at some point." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:675 -msgid "We are going to assume that ``Player.gd`` will pass themselves in before calling any of the functions in ``Weapon_Pistol.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:677 -msgid "While this can lead to situations where the player does not pass themselves in (because we forget), we would have to have a long string of ``get_parent`` calls to traverse up the scene tree to retrieve the player. This does not look pretty (``get_parent().get_parent().get_parent()`` and so on) and it is relatively safe to assume we will remember to pass ourselves to each weapon in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:683 -msgid "Next let's look at ``fire_weapon``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:685 -msgid "The first thing we do is instance the bullet scene we made earlier." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:687 -msgid "By instancing the scene, we are creating a new node holding all the node(s) in the scene we instanced, effectively cloning that scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:689 -msgid "Then we add a ``clone`` to the first child node of the root of the scene we are currently in. By doing this, we're making it a child of the root node of the currently loaded scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:691 -msgid "In other words, we are adding a ``clone`` as a child of the first node (whatever is at the top of the scene tree) in the currently loaded/opened scene. If the currently loaded/open scene is ``Testing_Area.tscn``, we'd be adding our ``clone`` as a child of ``Testing_Area``, the root node in that scene." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:694 -msgid "As mentioned later below in the section on adding sounds, this method makes an assumption. This will be explained later in the section on adding sounds in :ref:`doc_fps_tutorial_part_three`" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:697 -msgid "Next we set the global transform of the clone to the ``Pistol_Point``'s global transform. The reason we do this is so the bullet is spawned at the end of the pistol." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:699 -msgid "You can see that ``Pistol_Point`` is positioned right at the end of the pistol by clicking the :ref:`AnimationPlayer ` and scrolling through ``Pistol_fire``. You'll find the position is more or less at the end of the pistol when it fires." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:702 -msgid "Next we scale it up by a factor of ``4`` because the bullet scene is a little too small by default." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:704 -msgid "Then we set the bullet's damage (``BULLET_DAMAGE``) to the amount of damage a single pistol bullet does (``DAMAGE``)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:708 -msgid "Now let's look at ``equip_weapon``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:710 -msgid "The first thing we do is check to see whether the animation manager is in the pistol's idle animation. If we are in the pistol's idle animation, we set ``is_weapon_enabled`` to ``true`` and return ``true`` because the pistol has successfully been equipped." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:714 -msgid "Because we know our pistol's ``equip`` animation automatically transitions to the pistol's idle animation, if we are in the pistol's idle animation the pistol must have finished playing the equip animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:717 -msgid "We know these animations will transition because we wrote the code to make them transition in ``Animation_Manager.gd``" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:719 -msgid "Next we check to see if the player is in the ``Idle_unarmed`` animation state. Because all unequipping animations go to this state, and because any weapon can be equipped from this state, we change animations to ``Pistol_equip`` if the player is in the ``Idle_unarmed`` state." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:722 -msgid "Since we know ``Pistol_equip`` will transition to ``Pistol_idle``, we do not need to do any more additional processing for equipping weapons, but since we were not able to equip the pistol yet, we return ``false``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:727 -msgid "Finally, let's look at ``unequip_weapon``:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:729 -msgid "``unequip_weapon`` is similar to ``equip_weapon``, but instead we're checking things in reverse." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:731 -msgid "First we check to see whether the player is in the idle animation state. Then we check to make sure the player is not in the ``Pistol_unequip`` animation. If the player is not in the ``Pistol_unequip`` animation, we want to play the ``pistol_unequip`` animation." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:734 -msgid "You may be wondering why we are checking to see whether the player is in the pistol's idle animation, and then making sure the player is not unequipping right after. The reason behind the additional check is because we could (in rare cases) call ``unequip_weapon`` twice before we've had a chance to process ``set_animation``, so we add this additional check to make sure the unequip animation plays." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:738 -msgid "Next we check to see whether the player is in ``Idle_unarmed``, which is the animation state we will transition into from ``Pistol_unequip``. If the player is in ``Idle_unarmed``, then we set ``is_weapon_enabled`` to ``false`` since we are no longer using this weapon, and return ``true`` because we have successfully unequipped the pistol." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:741 -msgid "If the player is not in ``Idle_unarmed``, we return ``false`` because we have not yet successfully unequipped the pistol." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:744 -msgid "Creating the other two weapons" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:746 -msgid "Now that we have all the code we'll need for the pistol, let's add the code for the rifle and knife next." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:748 -msgid "Select ``Rifle_Point`` (``Player`` -> ``Rotation_Helper`` -> ``Gun_Fire_Points`` -> ``Rifle_Point``) and create a new script called ``Weapon_Rifle.gd``, then add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:801 -msgid "Most of this is exactly the same as ``Weapon_Pistol.gd``, so we're only going to look at what's changed: ``fire_weapon``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:803 -msgid "The first thing we do is get the :ref:`Raycast ` node, which is a child of ``Rifle_Point``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:805 -msgid "Next we force the :ref:`Raycast ` to update using ``force_raycast_update``. This will force the :ref:`Raycast ` to detect collisions when we call it, meaning we get a frame perfect collision check with the 3D physics world." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:808 -msgid "Then we check to see if the :ref:`Raycast ` collided with something." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:810 -msgid "If the :ref:`Raycast ` has collided with something, we first get the collision body it collided with. This can be a :ref:`StaticBody `, :ref:`RigidBody `, or a :ref:`KinematicBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:813 -msgid "Next we want to make sure the body we've collided with is not the player, since we (probably) do not want to give the player the ability to shoot themselves in the foot." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:815 -msgid "If the body is not the player, we then check to see if it has a function/method called ``bullet_hit``. If it does, we call it and pass in the amount of damage this bullet does (``DAMAGE``), and the global transform of the :ref:`Raycast ` so we can tell from which direction the bullet came." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:820 -msgid "Now all we need to do is write the code for the knife." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:822 -msgid "Select ``Knife_Point`` (``Player`` -> ``Rotation_Helper`` -> ``Gun_Fire_Points`` -> ``Knife_Point``) and create a new script called ``Weapon_Knife.gd``, then add the following:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:873 -msgid "As with ``Weapon_Rifle.gd``, the only differences are in ``fire_weapon``, so let's look at that:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:875 -msgid "The first thing we do is get the :ref:`Area ` child node of ``Knife_Point``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:877 -msgid "Next we want to get all the collision bodies inside the :ref:`Area ` using ``get_overlapping_bodies``. This will return a list of every body that touches the :ref:`Area `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:880 -msgid "We next want to go through each of those bodies." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:882 -msgid "First we check to make sure the body is not the player, because we do not want to let the player be able to stab themselves. If the body is the player, we use ``continue`` so we jump and look at the next body in ``bodies``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:885 -msgid "If we have not jumped to the next body, we then check to see if the body has the ``bullet_hit`` function/method. If it does, we call it, passing in the amount of damage a single knife swipe does (``DAMAGE``) and the global transform of the :ref:`Area `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:888 -msgid "While we could attempt to calculate a rough location for where the knife hit exactly, we are not going to because using the :ref:`Area `'s position works well enough and the extra time needed to calculate a rough position for each body is not worth the effort." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:893 -msgid "Making the weapons work" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:895 -msgid "Let's start making the weapons work in ``Player.gd``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:897 -msgid "First let's start by adding some class variables we'll need for the weapons:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:915 -msgid "Let's go over what these new variables will do:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:917 -msgid "``animation_manager``: This will hold the :ref:`AnimationPlayer ` node and its script, which we wrote previously." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:918 -msgid "``current_weapon_name``: The name of the weapon we are currently using. It has four possible values: ``UNARMED``, ``KNIFE``, ``PISTOL``, and ``RIFLE``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:919 -msgid "``weapons``: A dictionary that will hold all the weapon nodes." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:920 -msgid "``WEAPON_NUMBER_TO_NAME``: A dictionary allowing us to convert from a weapon's number to its name. We'll use this for changing weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:921 -msgid "``WEAPON_NAME_TO_NUMBER``: A dictionary allowing us to convert from a weapon's name to its number. We'll use this for changing weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:922 -msgid "``changing_weapon``: A boolean to track whether or not we are changing guns/weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:923 -msgid "``changing_weapon_name``: The name of the weapon we want to change to." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:924 -msgid "``health``: How much health our player has. In this part of the tutorial we will not be using it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:925 -msgid "``UI_status_label``: A label to show how much health we have, and how much ammo we have both in our gun and in reserve." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:929 -msgid "Next we need to add a few things in ``_ready``. Here's the new ``_ready`` function:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:961 -msgid "Let's go over what's changed." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:963 -msgid "First we get the :ref:`AnimationPlayer ` node and assign it to the ``animation_manager`` variable. Then we set the callback function to a :ref:`FuncRef ` that will call the player's ``fire_bullet`` function. Right now we haven't written the ``fire_bullet`` function, but we'll get there soon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:967 -msgid "Next we get all the weapon nodes and assign them to ``weapons``. This will allow us to access the weapon nodes only with their name (``KNIFE``, ``PISTOL``, or ``RIFLE``)." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:970 -msgid "We then get ``Gun_Aim_Point``'s global position so we can rotate the player's weapons to aim at it." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:972 -msgid "Then we go through each weapon in ``weapons``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:974 -msgid "We first get the weapon node. If the weapon node is not ``null``, we then set its ``player_node`` variable to this script (``Player.gd``). Then we have it look at ``gun_aim_point_pos`` using the ``look_at`` function, and then rotate it by ``180`` degrees on the ``Y`` axis." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:977 -msgid "We rotate all of those weapon points by ``180`` degrees on their ``Y`` axis because our camera is pointing backwards. If we did not rotate all of these weapon points by ``180`` degrees, all of the weapons would fire backwards." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:980 -msgid "Then we set ``current_weapon_name`` and ``changing_weapon_name`` to ``UNARMED``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:982 -msgid "Finally, we get the UI :ref:`Label ` from our HUD." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:986 -msgid "Let's add a new function call to ``_physics_process`` so we can change weapons. Here's the new code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:996 -msgid "Now we will call ``process_changing_weapons``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1000 -msgid "Now let's add all the player input code for the weapons in ``process_input``. Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1040 -msgid "Let's go over the additions, starting with how we're changing weapons." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1042 -msgid "First we get the current weapon's number and assign it to ``weapon_change_number``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1044 -msgid "Then we check to see if any of the number keys (keys 1-4) are pressed. If they are, we set ``weapon_change_number`` to the value mapped at that key." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1047 -msgid "The reason key 1 is mapped to ``0`` is because the first element in a list is mapped to zero, not one. Most list/array accessors in most programming languages start at ``0`` instead of ``1``. See https://en.wikipedia.org/wiki/Zero-based_numbering for more information." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1050 -msgid "Next we check to see if ``shift_weapon_positive`` or ``shift_weapon_negative`` is pressed. If one of them is, we add/subtract ``1`` from ``weapon_change_number``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1053 -msgid "Because the player may have shifted ``weapon_change_number`` outside of the number of weapons the player has, we clamp it so it cannot exceed the maximum number of weapons the player has and it ensures ``weapon_change_number`` is ``0`` or more." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1056 -msgid "Then we check to make sure the player is not already changing weapons. If the player is not, we then check to see if the weapon the player wants to change to is a new weapon and not the weapon the player is currently using. If the weapon the player is wanting to change to is a new weapon, we then set ``changing_weapon_name`` to the weapon at ``weapon_change_number`` and set ``changing_weapon`` to ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1060 -msgid "For firing the weapon we first check to see if the ``fire`` action is pressed. Then we check to make sure the player is not changing weapons. Next we get the weapon node for the current weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1064 -msgid "If the current weapon node does not equal ``null``, and the player is in its ``IDLE_ANIM_NAME`` state, we set the player's animation to the current weapon's ``FIRE_ANIM_NAME``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1069 -msgid "Let's add ``process_changing_weapons`` next." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1071 -msgid "Add the following code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1107 -msgid "Let's go over what's happening here:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1109 -msgid "The first thing we do is make sure we've received input to change weapons. We do this by making sure ``changing_weapon`` is ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1111 -msgid "Next we define a variable (``weapon_unequipped``) so we can check whether the current weapon has been successfully unequipped or not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1113 -msgid "Then we get the current weapon from ``weapons``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1115 -msgid "If the current weapon is not ``null``, then we need to check whether the weapon is enabled. If the weapon is enabled, we call its ``unequip_weapon`` function so it will start the unequip animation. If the weapon is not enabled, we set ``weapon_unequipped`` to ``true`` because the weapon has successfully been unequipped." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1118 -msgid "If the current weapon is ``null``, then we can simply set ``weapon_unequipped`` to ``true``. The reason we do this check is because there is no weapon script/node for ``UNARMED``, but there is also no animations for ``UNARMED``, so we can just start equipping the weapon the player wants to change to." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1121 -msgid "If the player has successfully unequipped the current weapon (``weapon_unequipped == true``), we need to equip the new weapon." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1123 -msgid "First we define a new variable (``weapon_equipped``) for tracking whether the player has successfully equipped the new weapon or not." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1125 -msgid "Then we get the weapon the player wants to change to. If the weapon the player wants to change to is not ``null``, we then check to see whether it's enabled or not. If it is not enabled, we call its ``equip_weapon`` function so it starts to equip the weapon. If the weapon is enabled, we set ``weapon_equipped`` to ``true``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1128 -msgid "If the weapon the player wants to change to is ``null``, we simply set ``weapon_equipped`` to ``true`` because we do not have any node/script for ``UNARMED``, nor do we have any animations." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1131 -msgid "Finally, we check to see whether the player has successfully equipped the new weapon. If (s)he has done so, we set ``changing_weapon`` to ``false`` because the player is no longer changing weapons. We also set ``current_weapon_name`` to ``changing_weapon_name`` since the current weapon has changed, and then we set ``changing_weapon_name`` to an empty string." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1137 -msgid "Now, we need to add one more function to the player, and then the player is ready to start firing the weapons!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1139 -msgid "We need to add ``fire_bullet``, which will be called by the :ref:`AnimationPlayer ` at those points we set earlier in the :ref:`AnimationPlayer ` function track:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1151 -msgid "Let's go over what this function does:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1153 -msgid "First we check to see whether the player is changing weapons. If the player is changing weapons, we do not want shoot, so we ``return``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1155 -msgid "Calling ``return`` stops the rest of the function from being called. In this case, we are not returning a variable because we are only interested in not running the rest of the code, and because we are not looking for a returned variable either when we call this function." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1159 -msgid "Then we tell the current weapon the player is using to fire by calling its ``fire_weapon`` function." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1161 -msgid "Remember how we mentioned the speed of the animations for firing was faster than the other animations? By changing the firing animation speeds, you can change how fast the weapon fires bullets!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1167 -msgid "Before we are ready to test our new weapons, we still have a bit of work to do." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1170 -msgid "Creating some test subjects" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1172 -msgid "Create a new script by going to the scripting window, clicking \"file\", and selecting new. Name this script ``RigidBody_hit_test`` and make sure it extends :ref:`RigidBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1175 -msgid "Now we need to add this code:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1192 -msgid "Let's go over how ``bullet_hit`` works:" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1195 -msgid "First we get the bullet's forward directional vector. This is so we can tell from which direction the bullet will hit the :ref:`RigidBody `. We will use this to push the :ref:`RigidBody ` in the same direction as the bullet." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1198 -msgid "We need to boost the directional vector by ``BASE_BULLET_BOOST`` so the bullets pack a bit more of a punch and move the :ref:`RigidBody ` nodes in a visible way. You can just set ``BASE_BULLET_BOOST`` to lower or higher values if you want less or more of a reaction when the bullets collide with the :ref:`RigidBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1202 -msgid "Then we apply an impulse using ``apply_impulse``." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1204 -msgid "First, we need to calculate the position for the impulse. Because ``apply_impulse`` takes a vector relative to the :ref:`RigidBody `, we need to calculate the distance from the :ref:`RigidBody ` to the bullet. We do this by subtracting the :ref:`RigidBody `'s global origin/position from the bullet's global origin/position. This gets us the distance from the :ref:`RigidBody ` to the bullet. We normalize this vector so the size of the collider does not effect how much the bullets move the :ref:`RigidBody `." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1210 -msgid "Finally, we need to calculate the force for the impulse. For this, we use the direction the bullet is facing and multiply it by the bullet's damage. This gives a nice result and for stronger bullets, we get a stronger result." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1215 -msgid "Now we need to attach this script to all of the :ref:`RigidBody ` nodes we want to affect." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1217 -msgid "Open up ``Testing_Area.tscn`` and select all the cubes parented to the ``Cubes`` node." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1219 -msgid "If you select the top cube, and then hold down :kbd:`Shift` and select the last cube, Godot will select all the cubes in-between!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1222 -msgid "Once you have all the cubes selected, scroll down in the inspector until you get to the \"scripts\" section. Click the drop down and select \"Load\". Open your newly created ``RigidBody_hit_test.gd`` script." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1226 -msgid "Final notes" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1230 -msgid "That was a lot of code! But now, with all that done, you can go and give your weapons a test!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1232 -msgid "You should now be able to fire as many bullets as you want at the cubes and they will move in response to the bullets colliding with them." -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1235 -msgid "In :ref:`doc_fps_tutorial_part_three`, we will add ammo to the weapons, as well as some sounds!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1237 -msgid "If you ever get lost, be sure to read over the code again!" -msgstr "" - -#: ../../docs/tutorials/3d/fps_tutorial/part_two.rst:1239 -msgid "You can download the finished project for this part here: :download:`Godot_FPS_Part_2.zip `" -msgstr "" diff --git a/sphinx/templates/tutorials/3d/gi_probes.pot b/sphinx/templates/tutorials/3d/gi_probes.pot index 9132cb991e..fa1cac8015 100644 --- a/sphinx/templates/tutorials/3d/gi_probes.pot +++ b/sphinx/templates/tutorials/3d/gi_probes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/high_dynamic_range.pot b/sphinx/templates/tutorials/3d/high_dynamic_range.pot index 9055b375a2..89328a22da 100644 --- a/sphinx/templates/tutorials/3d/high_dynamic_range.pot +++ b/sphinx/templates/tutorials/3d/high_dynamic_range.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/index.pot b/sphinx/templates/tutorials/3d/index.pot index fdb8a3354e..66548a2c4c 100644 --- a/sphinx/templates/tutorials/3d/index.pot +++ b/sphinx/templates/tutorials/3d/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/introduction_to_3d.pot b/sphinx/templates/tutorials/3d/introduction_to_3d.pot index fb1db8b3a6..cb71bf20c0 100644 --- a/sphinx/templates/tutorials/3d/introduction_to_3d.pot +++ b/sphinx/templates/tutorials/3d/introduction_to_3d.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/lights_and_shadows.pot b/sphinx/templates/tutorials/3d/lights_and_shadows.pot index a20f132202..7e90a21780 100644 --- a/sphinx/templates/tutorials/3d/lights_and_shadows.pot +++ b/sphinx/templates/tutorials/3d/lights_and_shadows.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/occluders.pot b/sphinx/templates/tutorials/3d/occluders.pot new file mode 100644 index 0000000000..d23da4f18f --- /dev/null +++ b/sphinx/templates/tutorials/3d/occluders.pot @@ -0,0 +1,89 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) +# This file is distributed under the same license as the Godot Engine package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Godot Engine 3.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../docs/tutorials/3d/occluders.rst:4 +msgid "Occluder Nodes" +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:6 +msgid "In addition to occlusion via :ref:`doc_rooms_and_portals`, Godot also has the ability to provide basic occlusion using simple geometric ``Occluder`` nodes. These are geometric shapes that are shown in the editor using gizmos, but are invisible at runtime." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:8 +msgid "Any object that is fully occluded by the shape (behind or in some cases inside) will be culled at runtime. They are designed to be simple to use and inexpensive at runtime, but the trade off is they may not be as effective at culling as :ref:`doc_rooms_and_portals`. Nevertheless they can still significantly boost performance in some situations." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:10 +msgid "It is important to understand that geometric occluders work by testing the axis aligned bounding box (``AABB``) of the occludee against the occluder. The AABB must be *fully occluded* to be culled. The consequence of this is that smaller objects are more likely to be effectively culled than larger objects." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:12 +msgid "A major advantage to Occluder nodes is that they are fully dynamic. For example if you place an occluder node as a child of a spaceship, it will move as you move the parent object." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:14 +msgid "The reason that Occluder nodes are so cheap in performance terms is that the engine dynamically chooses the most relevant occluders at runtime, based on the current viewpoint of the Camera. This means you can often have hundreds of occluders present in the scene. Only the most relevant will be active at any one time." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:16 +msgid "The Occluder node itself is a holder for an OccluderShape resource, which determines the functionality. To get started, add an Occluder node to your scene tree." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:18 +msgid "You will see a yellow warning triangle that lets you know that you must set an OccluderShape from the inspector before the ``Occluder`` becomes functional." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:21 +msgid "OccluderShapeSphere" +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:23 +msgid "The sphere is one of the simplest and fastest occluders, and is easy to setup and position. The downside is that the sphere only tends to make sense in certain game level designs, and is more suited to terrain or organic background geometry." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:25 +msgid "Once you have added an OccluderNode and chosen to add a new ``OccluderShapeSphere`` in the inspector, click the OccluderShapeSphere in the inspector to bring up the parameters." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:29 +msgid "Unlike many Nodes, the ``OccluderShapeSphere`` can store multiple spheres in the same object. This is more efficient in the engine, and keeps your SceneTree clearer. You don't have to store all your spheres in one Occluder as it could become tricky to manage, but it is perfectly reasonable to add 10 or so spheres or more. They are very cheap, and often the more you place, the better the match you will get to your geometry." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:31 +msgid "In order to store multiple spheres, they are stored as an Array. If you click on the Array in the inspector, you can increase the size of the Array to add one." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:35 +msgid "The sphere will appear as a small pink spherical object in the editor window. There are two handles on each sphere. The larger middle handle enables you to move the sphere around in the local space of the Occluder, and the small handle enables you to adjust the radius." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:37 +msgid "Although you can change the position of the sphere using the Occluder Node transform in the inspector, this moves *the entire array* of spheres. When you want to use multiple spheres in one occluder, the handles do this job. In order to allow positioning in 3D, the gizmo will only move the 3D position in the two principal axes depending on the viewpoint in the editor. This is easier for you to get the hang of by trying it out than by explanation." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:39 +msgid "There is one more handy function in the editor when using multiple spheres. If you click the `Center Node` toolbar button it will recalculate the local positions of the spheres relative to the average of the entire node, and change the transform of the Occluder Node. This is a handy convenience function to make it easier to place them." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:41 +msgid "At runtime the spheres can be switched on and off changing the Occluder node visibility, and the Node can be moved and scaled and rotated etc." +msgstr "" + +#: ../../docs/tutorials/3d/occluders.rst:43 +msgid "A common use case for occluder spheres is providing occlusion on mountainous / hilly terrain. By placing spheres inside mountains you can prevent trees, plants, building and objects rendering behind mountains. With some creativity they can also be used for moving objects such as large spacecraft, planets etc." +msgstr "" diff --git a/sphinx/templates/tutorials/3d/portals/advanced_room_and_portal_usage.pot b/sphinx/templates/tutorials/3d/portals/advanced_room_and_portal_usage.pot index 57a932138d..ccc5cb853a 100644 --- a/sphinx/templates/tutorials/3d/portals/advanced_room_and_portal_usage.pot +++ b/sphinx/templates/tutorials/3d/portals/advanced_room_and_portal_usage.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/portals/editing_rooms_and_portals.pot b/sphinx/templates/tutorials/3d/portals/editing_rooms_and_portals.pot index d82a0eee74..c6ebbae186 100644 --- a/sphinx/templates/tutorials/3d/portals/editing_rooms_and_portals.pot +++ b/sphinx/templates/tutorials/3d/portals/editing_rooms_and_portals.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/portals/first_steps_with_rooms_and_portals.pot b/sphinx/templates/tutorials/3d/portals/first_steps_with_rooms_and_portals.pot index c97915bafd..f10d0b491e 100644 --- a/sphinx/templates/tutorials/3d/portals/first_steps_with_rooms_and_portals.pot +++ b/sphinx/templates/tutorials/3d/portals/first_steps_with_rooms_and_portals.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/portals/index.pot b/sphinx/templates/tutorials/3d/portals/index.pot index 19939cb1ab..ad24eb4d29 100644 --- a/sphinx/templates/tutorials/3d/portals/index.pot +++ b/sphinx/templates/tutorials/3d/portals/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/portals/introduction_to_rooms_and_portals.pot b/sphinx/templates/tutorials/3d/portals/introduction_to_rooms_and_portals.pot index 9f6d5984e5..a02c5745c9 100644 --- a/sphinx/templates/tutorials/3d/portals/introduction_to_rooms_and_portals.pot +++ b/sphinx/templates/tutorials/3d/portals/introduction_to_rooms_and_portals.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/portals/rooms_and_portals_example.pot b/sphinx/templates/tutorials/3d/portals/rooms_and_portals_example.pot index fac068ed9e..efa197b52e 100644 --- a/sphinx/templates/tutorials/3d/portals/rooms_and_portals_example.pot +++ b/sphinx/templates/tutorials/3d/portals/rooms_and_portals_example.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/portals/using_objects_in_rooms_and_portals.pot b/sphinx/templates/tutorials/3d/portals/using_objects_in_rooms_and_portals.pot index 8154355f67..f2eee028bc 100644 --- a/sphinx/templates/tutorials/3d/portals/using_objects_in_rooms_and_portals.pot +++ b/sphinx/templates/tutorials/3d/portals/using_objects_in_rooms_and_portals.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/content/procedural_geometry/arraymesh.pot b/sphinx/templates/tutorials/3d/procedural_geometry/arraymesh.pot similarity index 68% rename from sphinx/templates/tutorials/content/procedural_geometry/arraymesh.pot rename to sphinx/templates/tutorials/3d/procedural_geometry/arraymesh.pot index 6c5dd752ef..97b38a7f22 100644 --- a/sphinx/templates/tutorials/content/procedural_geometry/arraymesh.pot +++ b/sphinx/templates/tutorials/3d/procedural_geometry/arraymesh.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,146 +16,146 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:4 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:4 msgid "Using the ArrayMesh" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:6 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:6 msgid "This tutorial will present the basics of using an :ref:`ArrayMesh `" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:8 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:8 msgid "To do so, we will use the function :ref:`add_surface_from_arrays() `, which takes up to four parameters. The first two are required, while the second two are optional." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:11 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:11 msgid "The first is the ``PrimitiveType``, this is an OpenGL concept that instructs the GPU how to arrange the primitive based on the vertices given whether it is triangles, lines, points, etc. A complete list can be found under the :ref:`Mesh ` class reference page." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:16 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:16 msgid "The second is the actual Array that stores the mesh information. The array is a normal Godot array that is constructed with empty brackets ``[]``. It stores a ``Pool**Array`` (e.g. PoolVector3Array, PoolIntArray, etc.) for each type of information." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:20 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:20 msgid "``ARRAY_VERTEX`` = 0 | PoolVector3Array or PoolVector2Array" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:21 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:21 msgid "``ARRAY_NORMAL`` = 1 | PoolVector3Array" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:22 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:22 msgid "``ARRAY_TANGENT`` = 2 | PoolRealArray of groups of 4 floats. First 3 floats determine the tangent, and the last the binormal direction as -1 or 1." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:24 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:24 msgid "``ARRAY_COLOR`` = 3 | PoolColorArray" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:25 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:25 msgid "``ARRAY_TEX_UV`` = 4 | PoolVector2Array or PoolVector3Array" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:26 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:26 msgid "``ARRAY_TEX_UV2`` = 5 | PoolVector2Array or PoolVector3Array" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:27 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:27 msgid "``ARRAY_BONES`` = 6 | PoolRealArray of groups of 4 floats or PoolIntArray of groups of 4 ints" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:28 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:28 msgid "``ARRAY_WEIGHTS`` = 7 | PoolRealArray of groups of 4 floats" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:29 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:29 msgid "``ARRAY_INDEX`` = 8 | PoolIntArray" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:31 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:31 msgid "The Array of vertices is always required. All the others are optional and will only be used if included." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:33 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:33 msgid "Each array needs to have the same number of elements as the vertex array except for the index array. For arrays like tangents, an element is a group of 4 floats. So the array size will be four times the size of the vertex array size, but they will have the same number of elements" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:37 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:37 msgid "The index array is unique." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:39 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:39 msgid "The third parameter is an array of blendshapes for the Mesh to use. While this tutorial does not cover using blendshapes, it is possible to specify them when creating a surface from arrays." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:42 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:42 msgid "The last parameter is the compress flags which specifies which arrays to store with half as many bits. The values can be found in the classref for :ref:`VisualServer ` under :ref:`ArrayFormat `." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:45 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:45 msgid "For normal usage you will find it is best to leave the last two parameters empty." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:48 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:48 msgid "ArrayMesh" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:50 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:50 msgid "Add an :ref:`ArrayMesh ` to a MeshInstance. Normally, adding an ArrayMesh in the editor is not useful, but in this case it allows as to access the ArrayMesh from code without creating one." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:54 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:54 msgid "Next, add a script to the MeshInstance." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:56 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:56 msgid "Under ``_ready()``, create a new Array." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:63 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:63 msgid "This will be the array that we keep our surface information in, it will hold all the arrays of data that the surface needs. Godot will expect it to be of size ``Mesh.ARRAY_MAX``, so resize it accordingly." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:73 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:73 msgid "Next create the arrays for each data type you will use." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:83 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:83 msgid "Once you have filled your data arrays with your geometry you can create a mesh by adding each array to ``surface_array`` and then committing to the mesh." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:96 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:96 msgid "In this example, we used ``Mesh.PRIMITIVE_TRIANGLES``, but you can use any primitive type available from mesh." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:99 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:99 msgid "Put together the full code looks like:" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:130 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:130 msgid "The code that goes in the middle can be whatever you want. Below we will present some example code that could go in the middle." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:134 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:134 msgid "Generating geometry" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:136 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:136 msgid "Here is sample code for generating a sphere. Although the code is presented in GDScript, there is nothing Godot specific about the approach to generating it. This implementation has nothing in particular to do with ArrayMeshes and is just a generic approach to generating a sphere. If you are having trouble understanding it or want to learn more about procedural geometry in general, you can use any tutorial that you find online." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:203 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:203 msgid "Combined with the code above, this code will generate a sphere." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:205 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:205 msgid "When it comes to generating geometry with the ArrayMesh you need to understand what goes in each array and then you can follow tutorials for any language/engine and convert it into Godot." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:209 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:209 msgid "Saving" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/arraymesh.rst:211 +#: ../../docs/tutorials/3d/procedural_geometry/arraymesh.rst:211 msgid "Finally, Godot provides a single method to save ArrayMeshes using the :ref:`ResourceSaver ` class. This is useful when you want to generate a mesh and then use it later without having to re-generate." msgstr "" diff --git a/sphinx/templates/tutorials/content/procedural_geometry/immediategeometry.pot b/sphinx/templates/tutorials/3d/procedural_geometry/immediategeometry.pot similarity index 76% rename from sphinx/templates/tutorials/content/procedural_geometry/immediategeometry.pot rename to sphinx/templates/tutorials/3d/procedural_geometry/immediategeometry.pot index b7fd29644d..c43079dc25 100644 --- a/sphinx/templates/tutorials/content/procedural_geometry/immediategeometry.pot +++ b/sphinx/templates/tutorials/3d/procedural_geometry/immediategeometry.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,38 +16,38 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:4 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:4 msgid "Using ImmediateGeometry" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:6 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:6 msgid "Unlike the SurfaceTool or ArrayMesh, :ref:`ImmediateGeometry ` is an actual node. Being a node makes it quick to add to a scene and get visual output. It uses an OpenGL 1.x-style API like SurfaceTool, but it's actually designed to create meshes on the fly." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:10 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:10 msgid "Generating complex geometry (several thousand vertices) with this node is inefficient, even if it's done only once. Instead, it is designed to generate simple geometry that changes every frame." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:13 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:13 msgid "Before starting, you should clear the geometry by calling ``clear()``. This ensures that you are not building upon the geometry from the previous frame. If you want to keep geometry between frames, do not call ``clear()``." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:17 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:17 msgid "To begin generating geometry you must call ``begin()``. ``begin()`` takes a ``PrimitiveType`` as an argument. ``PrimitiveType`` is an OpenGL concept that instructs the GPU how to arrange the primitive based on the vertices given whether it is triangles, lines, points, etc. A complete list can be found under the :ref:`Mesh ` class reference page." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:22 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:22 msgid "Once you have called ``begin()`` you are ready to start adding vertices. You add vertices one at a time. First you add vertex specific attributes such as normals or UVs using ``set_****()`` (e.g. ``set_normal()``). Then you call ``add_vertex()`` to add a vertex with those attributes. For example:" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:34 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:34 msgid "Only attributes added before the call to ``add_vertex()`` will be included in that vertex." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:36 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:36 msgid "Finally, once you have added all your vertices call ``end()`` to signal that you have finished generating the mesh." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/immediategeometry.rst:38 +#: ../../docs/tutorials/3d/procedural_geometry/immediategeometry.rst:38 msgid "The example code below draws a single triangle." msgstr "" diff --git a/sphinx/templates/tutorials/content/procedural_geometry/index.pot b/sphinx/templates/tutorials/3d/procedural_geometry/index.pot similarity index 75% rename from sphinx/templates/tutorials/content/procedural_geometry/index.pot rename to sphinx/templates/tutorials/3d/procedural_geometry/index.pot index 0b959ff578..71c43299d9 100644 --- a/sphinx/templates/tutorials/content/procedural_geometry/index.pot +++ b/sphinx/templates/tutorials/3d/procedural_geometry/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,146 +16,146 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:4 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:4 msgid "Procedural geometry" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:6 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:6 msgid "There are many ways to procedurally generate geometry in Godot. In this tutorial series we will explore a few of them. Each technique has its own benefits and drawbacks, so it is best to understand each one and how it can be useful in a given situation." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:20 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:20 msgid "What is geometry?" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:22 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:22 msgid "Geometry is a fancy way of saying shape. In computer graphics, geometry is typically represented by an array of positions called \"vertices\". In Godot, geometry is represented by Meshes." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:26 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:26 msgid "What is a Mesh?" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:28 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:28 msgid "Many things in Godot have mesh in their name: the :ref:`Mesh `, the :ref:`ArrayMesh `, the :ref:`MeshInstance `, the :ref:`MultiMesh `, and the :ref:`MultiMeshInstance `. While they are all related, they have slightly different uses." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:32 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:32 msgid "Meshes and ArrayMeshes are resources that are drawn using a MeshInstance node. Resources like Meshes and ArrayMeshes cannot be added to the scene directly. A MeshInstance represents one instance of a mesh in your scene. You can reuse a single mesh in multiple MeshInstances to draw it in different parts of your scene with different materials or transformations (scale, rotation, position etc.)." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:38 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:38 msgid "If you are going to draw the same object many times, it can be helpful to use a MultiMesh with a MultiMeshInstance. The MultiMeshInstance draws meshes thousands of times very cheaply. It takes advantage of hardware instancing in order to do so. The drawback with using a MultiMeshInstance is that you are limited to one material for all instances. It uses an instance array to store different colors and transformations for each instance, but all the instances use the same material." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:46 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:46 msgid "What a Mesh is" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:48 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:48 msgid "A Mesh is composed of one or more surfaces. A surface is an array composed of multiple sub-arrays containing vertices, normals, UVs, etc. Normally the process of constructing surfaces and meshes is hidden from the user in the :ref:`VisualServer `, but with ArrayMeshes, the user can construct a Mesh manually by passing in an array containing the surface information." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:54 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:54 msgid "Surfaces" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:56 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:56 msgid "Each surface has its own material. Alternatively, you can override the material for all surfaces in the Mesh when you use a MeshInstance using ``MeshInstance.override_material``." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:60 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:60 msgid "Surface array" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:62 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:62 msgid "The surface array is an array of length ``ArrayMesh.ARRAY_MAX``. Each position in the array is filled with a sub-array containing per-vertex information. For example, the array located at ``ArrayMesh.ARRAY_NORMAL`` is a :ref:`PoolVector3Array ` of vertex normals." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:66 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:66 msgid "The surface array can be indexed or non-indexed. Creating a non-indexed array is as easy as not assigning an array at the index ``ArrayMesh.ARRAY_INDEX``. A non-indexed array stores unique vertex information for every triangle, meaning that when two triangle share a vertex, the vertex is duplicated in the array. An indexed surface array only stores vertex information for each unique vertex and then also stores an array of indices which maps out how to construct the triangles from the vertex array. In general, using an indexed array is faster, but it means you have to share vertex data between triangles, which is not always desired (e.g. when you want per-face normals)." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:75 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:75 msgid "Tools" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:77 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:77 msgid "Godot provides different ways of accessing and working with geometry. More information on each will be provided in the following tutorials." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:81 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:81 msgid "ArrayMesh" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:83 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:83 msgid "The ArrayMesh resource extends Mesh to add a few different quality of life functions, and most importantly, the ability to construct a Mesh surface through scripting." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:86 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:86 msgid "For more information about the ArrayMesh, please see the :ref:`ArrayMesh tutorial `." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:89 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:89 msgid "MeshDataTool" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:91 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:91 msgid "The MeshDataTool is a resource that converts Mesh data into arrays of vertices, faces, and edges that can be modified at runtime." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:94 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:94 msgid "For more information about the MeshDataTool, please see the :ref:`MeshDataTool tutorial `." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:97 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:97 msgid "SurfaceTool" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:99 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:99 msgid "The SurfaceTool allows the creation of Meshes using an OpenGL 1.x immediate mode style interface." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:101 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:101 msgid "For more information about the SurfaceTool, please see the :ref:`SurfaceTool tutorial `." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:104 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:104 msgid "ImmediateGeometry" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:106 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:106 msgid "ImmediateGeometry is a node that uses an immediate mode style interface (like SurfaceTool) to draw objects. The difference between ImmediateGeometry and the SurfaceTool is that ImmediateGeometry is a node itself that can be added to the scene tree and is drawn directly from the code. The SurfaceTool generates a Mesh that needs to be added a MeshInstance to be seen." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:111 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:111 msgid "ImmediateGeometry is useful for prototyping because of the straightforward API, but it is slow because the geometry is rebuilt every frame. It is most useful for quickly adding simple geometry to debug visually (e.g. by drawing lines to visualize physics raycasts etc.)." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:115 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:115 msgid "For more information about ImmediateGeometry, please see the :ref:`ImmediateGeometry tutorial `." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:118 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:118 msgid "Which one should I use?" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:120 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:120 msgid "Which method you use depends on what you are trying to do and what kind of procedure you are comfortable with." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:122 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:122 msgid "Both SurfaceTool and ArrayMesh are excellent for generating static geometry (meshes) that don't change over time." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:124 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:124 msgid "Using an ArrayMesh is slightly faster than using a SurfaceTool, but the API is a little more challenging. Additionally, SurfaceTool has a few quality of life methods such as ``generate_normals()`` and ``index()``." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:127 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:127 msgid "ImmediateGeometry regenerates the mesh every frame, so it is much slower than ArrayMesh or SurfaceTool. However, if you need the geometry to change every frame anyway, it provides a much easier interface that may even be a little faster than generating an ArrayMesh every frame." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/index.rst:131 +#: ../../docs/tutorials/3d/procedural_geometry/index.rst:131 msgid "The MeshDataTool is not fast, but it gives you access to all kinds of properties of the mesh that you don't get with the others (edges, faces, etc.). It is incredibly useful when you need that sort of data to transform the mesh, but it is not a good idea to use it if that information is not needed. The MeshDataTool is best used if you are going to be using an algorithm that requires access to the face or edge array." msgstr "" diff --git a/sphinx/templates/tutorials/content/procedural_geometry/meshdatatool.pot b/sphinx/templates/tutorials/3d/procedural_geometry/meshdatatool.pot similarity index 75% rename from sphinx/templates/tutorials/content/procedural_geometry/meshdatatool.pot rename to sphinx/templates/tutorials/3d/procedural_geometry/meshdatatool.pot index 6320603981..cb50108855 100644 --- a/sphinx/templates/tutorials/content/procedural_geometry/meshdatatool.pot +++ b/sphinx/templates/tutorials/3d/procedural_geometry/meshdatatool.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,58 +16,58 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:4 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:4 msgid "Using the MeshDataTool" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:6 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:6 msgid "The :ref:`MeshDataTool ` is not used to generate geometry. But it is helpful for dynamically altering geometry, for example if you want to write a script to tessellate, simplify, or deform meshes." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:9 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:9 msgid "The MeshDataTool is not as fast as altering arrays directly using ArrayMesh. However, it provides more information and tools to work with meshes than the ArrayMesh does. When the MeshDataTool is used, it calculates mesh data that is not available in ArrayMeshes such as faces and edges, which are necessary for certain mesh algorithms. If you do not need this extra information then it may be better to use an ArrayMesh." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:14 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:14 msgid "MeshDataTool can only be used on Meshes that use the PrimitiveType ``Mesh.PRIMITIVE_TRIANGLES``." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:16 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:16 msgid "As an example, let's walk through the process of deforming the mesh generated in the :ref:`ArrayMesh tutorial `." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:18 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:18 msgid "Assume the mesh is stored in an ArrayMesh named ``mesh``. We then initialize the MeshDataTool from ``mesh`` by calling ``create_from_surface()``. If there is already data initialized in the MeshDataTool calling ``create_from_surface()`` will clear it for you. Alternatively, you can call ``clear()`` yourself before re-using the MeshDataTool" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:29 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:29 msgid "``create_from_surface()`` uses the vertex arrays from the ArrayMesh to calculate two additional arrays, one for edges and one for faces." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:32 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:32 msgid "An edge is a connection between any two vertices. Each edge in the edge array contains a reference to the two vertices it is composed of, and up to two faces that it is contained within." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:35 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:35 msgid "A face is a triangle made up of three vertices and three corresponding edges. Each face in the face array contains a reference to the three triangles and three edges it is composed of." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:38 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:38 msgid "The vertex array contains edges, faces, normals, color, tangent, uv, uv2, bones, and weight information connected with each vertex." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:41 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:41 msgid "To access information from these arrays you use a function of the form ``get_****()``:" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:51 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:51 msgid "What you choose to do with these functions is up to you. A common use case is to iterate over all vertices and transform them in some way:" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:62 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:62 msgid "Finally, ``commit_to_surface()`` adds a new surface to the ArrayMesh. So if you are dynamically updating an existing ArrayMesh, first delete the existing surface before adding a new one." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/meshdatatool.rst:71 +#: ../../docs/tutorials/3d/procedural_geometry/meshdatatool.rst:71 msgid "Below is a complete example that creates a pulsing blob complete with new normals and vertex colors." msgstr "" diff --git a/sphinx/templates/tutorials/content/procedural_geometry/surfacetool.pot b/sphinx/templates/tutorials/3d/procedural_geometry/surfacetool.pot similarity index 77% rename from sphinx/templates/tutorials/content/procedural_geometry/surfacetool.pot rename to sphinx/templates/tutorials/3d/procedural_geometry/surfacetool.pot index 7594bc294c..870dd85fce 100644 --- a/sphinx/templates/tutorials/content/procedural_geometry/surfacetool.pot +++ b/sphinx/templates/tutorials/3d/procedural_geometry/surfacetool.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,46 +16,46 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:4 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:4 msgid "Using the SurfaceTool" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:6 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:6 msgid "The :ref:`SurfaceTool ` provides a useful interface for constructing geometry. The interface is similar to the :ref:`ImmediateGeometry ` node. You set each per-vertex attribute (e.g. normal, uv, color) and then when you add a vertex it captures the attributes." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:11 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:11 msgid "The SurfaceTool also provides some useful helper functions like ``index()`` and ``generate_normals()``." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:13 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:13 msgid "Attributes are added before each vertex is added:" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:24 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:24 msgid "When finished generating your geometry with the :ref:`SurfaceTool ` call ``commit()`` to finished generating the mesh. If an :ref:`ArrayMesh ` is passed to ``commit()`` then it appends a new surface to the end of the ArrayMesh. While if nothing is passed in, ``commit()`` returns an ArrayMesh." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:36 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:36 msgid "Code creates a triangle with indices" msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:62 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:62 msgid "You can optionally add an index array, either by calling ``add_index()`` and adding vertices to the index array or by calling ``index()`` which shrinks the vertex array to remove duplicate vertices." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:82 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:82 msgid "Similarly, if you have an index array, but you want each vertex to be unique (e.g. because you want to use unique normals or colors per face instead of per-vertex), you can call ``deindex()``." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:90 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:90 msgid "If you don't add custom normals yourself, you can add them using ``generate_normals()``, which should be called after generating geometry and before committing the mesh using ``commit()`` or ``commit_to_arrays()``. Calling ``generate_normals(true)`` will flip the resulting normals. As a side note, ``generate_normals()`` only works if the primitive type is set to ``Mesh.PRIMITIVE_TRIANGLES``." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:95 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:95 msgid "If you don't add custom tangents, they can be added with ``generate_tangents()``, but it requires that each vertex have UVs and normals set already." msgstr "" -#: ../../docs/tutorials/content/procedural_geometry/surfacetool.rst:104 +#: ../../docs/tutorials/3d/procedural_geometry/surfacetool.rst:104 msgid "By default, when generating normals, they will be calculated on a per-face basis. If you want smooth vertex normals, when adding vertices, call ``add_smooth_group()``. ``add_smooth_group()`` needs to be called while building the geometry, e.g. before the call to ``add_vertex()`` (if non-indexed) or ``add_index()`` (if indexed)." msgstr "" diff --git a/sphinx/templates/tutorials/3d/reflection_probes.pot b/sphinx/templates/tutorials/3d/reflection_probes.pot index c3a882549b..0cec54eeca 100644 --- a/sphinx/templates/tutorials/3d/reflection_probes.pot +++ b/sphinx/templates/tutorials/3d/reflection_probes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/spatial_material.pot b/sphinx/templates/tutorials/3d/spatial_material.pot index b4db669d19..f93819273d 100644 --- a/sphinx/templates/tutorials/3d/spatial_material.pot +++ b/sphinx/templates/tutorials/3d/spatial_material.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/using_gridmaps.pot b/sphinx/templates/tutorials/3d/using_gridmaps.pot index 0e20b1d543..8b906693ab 100644 --- a/sphinx/templates/tutorials/3d/using_gridmaps.pot +++ b/sphinx/templates/tutorials/3d/using_gridmaps.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/using_multi_mesh_instance.pot b/sphinx/templates/tutorials/3d/using_multi_mesh_instance.pot index 4d3cceb0bd..77390256ed 100644 --- a/sphinx/templates/tutorials/3d/using_multi_mesh_instance.pot +++ b/sphinx/templates/tutorials/3d/using_multi_mesh_instance.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/3d/using_transforms.pot b/sphinx/templates/tutorials/3d/using_transforms.pot index 7c5d6fd86c..d5c7d0a0d1 100644 --- a/sphinx/templates/tutorials/3d/using_transforms.pot +++ b/sphinx/templates/tutorials/3d/using_transforms.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/animation/2d_skeletons.pot b/sphinx/templates/tutorials/animation/2d_skeletons.pot index 51c07a8a78..6dfaf5dac4 100644 --- a/sphinx/templates/tutorials/animation/2d_skeletons.pot +++ b/sphinx/templates/tutorials/animation/2d_skeletons.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/animation/animation_tree.pot b/sphinx/templates/tutorials/animation/animation_tree.pot index 90014992c7..51b0948a63 100644 --- a/sphinx/templates/tutorials/animation/animation_tree.pot +++ b/sphinx/templates/tutorials/animation/animation_tree.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/animation/cutout_animation.pot b/sphinx/templates/tutorials/animation/cutout_animation.pot index e6550ef215..d87fffbce4 100644 --- a/sphinx/templates/tutorials/animation/cutout_animation.pot +++ b/sphinx/templates/tutorials/animation/cutout_animation.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -277,7 +277,7 @@ msgid "Animation tips" msgstr "" #: ../../docs/tutorials/animation/cutout_animation.rst:266 -msgid "The following section will be a collection of tips for creating animation for your cutout rigs. For more information on how the animation system in Godot works, see :ref:`doc_animations`." +msgid "The following section will be a collection of tips for creating animation for your cutout rigs. For more information on how the animation system in Godot works, see :ref:`doc_introduction_animation`." msgstr "" #: ../../docs/tutorials/animation/cutout_animation.rst:271 diff --git a/sphinx/templates/tutorials/animation/index.pot b/sphinx/templates/tutorials/animation/index.pot index ac6c03f3c7..b46a15acc8 100644 --- a/sphinx/templates/tutorials/animation/index.pot +++ b/sphinx/templates/tutorials/animation/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/animation/introduction.pot b/sphinx/templates/tutorials/animation/introduction.pot index 51bdb190da..055a4c6374 100644 --- a/sphinx/templates/tutorials/animation/introduction.pot +++ b/sphinx/templates/tutorials/animation/introduction.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -20,416 +20,412 @@ msgstr "" msgid "Introduction to the animation features" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:7 -msgid "Overview" -msgstr "" - -#: ../../docs/tutorials/animation/introduction.rst:9 +#: ../../docs/tutorials/animation/introduction.rst:6 msgid "The :ref:`class_AnimationPlayer` node allows you to create anything from simple to complex animations." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:12 +#: ../../docs/tutorials/animation/introduction.rst:9 msgid "In this guide you learn to:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:14 +#: ../../docs/tutorials/animation/introduction.rst:11 msgid "Work with the Animation Panel" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:15 +#: ../../docs/tutorials/animation/introduction.rst:12 msgid "Animate any property of any node" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:16 +#: ../../docs/tutorials/animation/introduction.rst:13 msgid "Create a simple animation" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:17 +#: ../../docs/tutorials/animation/introduction.rst:14 msgid "Call functions with the powerful Call Function Tracks" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:19 +#: ../../docs/tutorials/animation/introduction.rst:16 msgid "In Godot, you can animate anything available in the Inspector, such as Node transforms, sprites, UI elements, particles, visibility and color of materials, and so on. You can also modify values of script variables and call any function." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:25 +#: ../../docs/tutorials/animation/introduction.rst:22 msgid "Create an AnimationPlayer node" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:27 +#: ../../docs/tutorials/animation/introduction.rst:24 msgid "To use the animation tools we first have to create an :ref:`class_AnimationPlayer` node." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:30 +#: ../../docs/tutorials/animation/introduction.rst:27 msgid "The AnimationPlayer node type is the data container for your animations. One AnimationPlayer node can hold multiple animations, that can automatically transition to one another." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:37 +#: ../../docs/tutorials/animation/introduction.rst:34 msgid "The AnimationPlayer node" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:39 +#: ../../docs/tutorials/animation/introduction.rst:36 msgid "After creating one click on the AnimationPlayer node in the Node tab to open the Animation Panel at the bottom of the viewport." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:45 +#: ../../docs/tutorials/animation/introduction.rst:42 msgid "The animation panel position" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:47 +#: ../../docs/tutorials/animation/introduction.rst:44 msgid "It consists of four parts:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:52 +#: ../../docs/tutorials/animation/introduction.rst:49 msgid "The animation panel" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:54 +#: ../../docs/tutorials/animation/introduction.rst:51 msgid "Animation controls (i.e. add, load, save, and delete animations)" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:55 +#: ../../docs/tutorials/animation/introduction.rst:52 msgid "The tracks listing" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:56 +#: ../../docs/tutorials/animation/introduction.rst:53 msgid "The timeline with keyframes" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:57 +#: ../../docs/tutorials/animation/introduction.rst:54 msgid "The timeline and track controls, where you can zoom the timeline and edit tracks for example." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:61 +#: ../../docs/tutorials/animation/introduction.rst:58 msgid "Computer animation relies on keyframes" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:63 +#: ../../docs/tutorials/animation/introduction.rst:60 msgid "A keyframe defines the value of a property at a certain point in time." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:65 +#: ../../docs/tutorials/animation/introduction.rst:62 msgid "Diamond shapes represent keyframes in the timeline. A line between two keyframes indicates that the value hasn't changed." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:71 +#: ../../docs/tutorials/animation/introduction.rst:68 msgid "Keyframes in Godot" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:73 +#: ../../docs/tutorials/animation/introduction.rst:70 msgid "The engine interpolates values between keyframes, resulting in a gradual change in values over time." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:79 +#: ../../docs/tutorials/animation/introduction.rst:76 msgid "Two keyframes are all it takes to obtain a smooth motion" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:81 +#: ../../docs/tutorials/animation/introduction.rst:78 msgid "The timeline lets you insert keyframes and change their timing. It also defines how long the animation is." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:87 +#: ../../docs/tutorials/animation/introduction.rst:84 msgid "The timeline in the animation panel" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:89 +#: ../../docs/tutorials/animation/introduction.rst:86 msgid "Each line of the Animation Panel is an animation track. Normal and Transform tracks reference node properties. Their name or id is a path to the node and the affected property." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:96 +#: ../../docs/tutorials/animation/introduction.rst:93 msgid "Example of Normal animation tracks" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:100 +#: ../../docs/tutorials/animation/introduction.rst:97 msgid "If you animate the wrong property, you can edit a track's path anytime. Double click on it and type the new path. Play the animation using the \"Play from beginning\" button |Play from beginning| (or pressing :kbd:`Shift + D` on keyboard) to see the changes instantly." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:106 +#: ../../docs/tutorials/animation/introduction.rst:103 msgid "Tutorial: Creating a simple animation" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:109 +#: ../../docs/tutorials/animation/introduction.rst:106 msgid "Scene setup" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:111 +#: ../../docs/tutorials/animation/introduction.rst:108 msgid "For this tutorial, we'll create an AnimationPlayer node and a sprite node as its child." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:117 +#: ../../docs/tutorials/animation/introduction.rst:114 msgid "Our scene setup" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:121 +#: ../../docs/tutorials/animation/introduction.rst:118 msgid "AnimationPlayer inherits from Node instead of Node2D or Node3D, which means that the child nodes will not inherit the transform from the parent nodes due to a bare Node being present in the hierarchy." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:125 +#: ../../docs/tutorials/animation/introduction.rst:122 msgid "Therefore, it is not recommended to add nodes that have a 2D/3D transform as a child of an AnimationPlayer node." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:128 +#: ../../docs/tutorials/animation/introduction.rst:125 msgid "The sprite holds an image texture. We animate that sprite to move between two points on the screen. For this tutorial, use the default Godot icon as the sprite's texture. As a starting point, move the sprite to a left position on the screen." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:133 +#: ../../docs/tutorials/animation/introduction.rst:130 msgid "Select the AnimationPlayer node, then click the \"Animation\" button in the animation editor. From the list select \"New\" (|Add Animation|) to add a new animation. And Enter a name for the animation in the dialog box." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:141 +#: ../../docs/tutorials/animation/introduction.rst:138 msgid "Add a new animation" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:144 +#: ../../docs/tutorials/animation/introduction.rst:141 msgid "Adding a track" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:146 +#: ../../docs/tutorials/animation/introduction.rst:143 msgid "To add a new track for our sprite, select it and take a look in the toolbar:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:152 +#: ../../docs/tutorials/animation/introduction.rst:149 msgid "Convenience buttons" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:154 +#: ../../docs/tutorials/animation/introduction.rst:151 msgid "These switches and buttons allow you to add keyframes for the selected node's location, rotation, and scale respectively." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:157 +#: ../../docs/tutorials/animation/introduction.rst:154 msgid "Deselect rotation, because we are only interested in the location of our sprite for this tutorial and click on the key button." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:160 +#: ../../docs/tutorials/animation/introduction.rst:157 msgid "As we don't have a track already set up for the transform/location property, Godot asks whether it should set it up for us. Click **Create**." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:163 +#: ../../docs/tutorials/animation/introduction.rst:160 msgid "This creates a new track and our first keyframe at the beginning of the timeline:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:169 +#: ../../docs/tutorials/animation/introduction.rst:166 msgid "The sprite track" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:172 +#: ../../docs/tutorials/animation/introduction.rst:169 msgid "The second keyframe" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:174 +#: ../../docs/tutorials/animation/introduction.rst:171 msgid "Now we need to set the destination where our sprite should be headed and how much time it takes to get there." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:177 +#: ../../docs/tutorials/animation/introduction.rst:174 msgid "Let's say, we want it to take 2 seconds to go to the other point. By default the animation is set to last only 1 second, so change this in the timeline controls in animation panel's lower panel to 2." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:184 +#: ../../docs/tutorials/animation/introduction.rst:181 msgid "Animation length" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:186 +#: ../../docs/tutorials/animation/introduction.rst:183 msgid "Click on the timeline header near the 2-second mark and move the sprite to the target destination on the right side." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:189 +#: ../../docs/tutorials/animation/introduction.rst:186 msgid "Again, click the key button in the toolbar. This creates our second keyframe." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:193 +#: ../../docs/tutorials/animation/introduction.rst:190 msgid "Run the animation" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:195 +#: ../../docs/tutorials/animation/introduction.rst:192 msgid "Click on the \"Play from beginning\" (|Play from beginning|) button." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:197 +#: ../../docs/tutorials/animation/introduction.rst:194 msgid "Yay! Our animation runs:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:202 +#: ../../docs/tutorials/animation/introduction.rst:199 msgid "The animation" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:205 +#: ../../docs/tutorials/animation/introduction.rst:202 msgid "Back and forth" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:207 +#: ../../docs/tutorials/animation/introduction.rst:204 msgid "Godot has an additional feature here. Like said before, Godot always calculates the frames between two keyframes. In a loop, the first keyframe is also the last keyframe, if no keyframe is specified at the end." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:215 +#: ../../docs/tutorials/animation/introduction.rst:212 msgid "Animation loop" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:217 +#: ../../docs/tutorials/animation/introduction.rst:214 msgid "If you set the animation length to 4 seconds now, the animation moves back and forth. You can change this behavior if you change the track's loop mode. This is covered in the next chapter." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:222 -#: ../../docs/tutorials/animation/introduction.rst:230 +#: ../../docs/tutorials/animation/introduction.rst:219 +#: ../../docs/tutorials/animation/introduction.rst:227 msgid "Track settings" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:224 +#: ../../docs/tutorials/animation/introduction.rst:221 msgid "Each track has a settings panel at the end, where you can set the update mode, the track interpolation, and the loop mode." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:232 +#: ../../docs/tutorials/animation/introduction.rst:229 msgid "The update mode of a track tells Godot when to update the property values. This can be:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:235 +#: ../../docs/tutorials/animation/introduction.rst:232 msgid "Continuous: Update the property on each frame" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:236 +#: ../../docs/tutorials/animation/introduction.rst:233 msgid "Discrete: Only update the property on keyframes" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:237 +#: ../../docs/tutorials/animation/introduction.rst:234 msgid "Trigger: Only update the property on keyframes or triggers" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:238 +#: ../../docs/tutorials/animation/introduction.rst:235 msgid "Capture: The current value of a property is remembered, and it will blend with the first animation key found" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:243 +#: ../../docs/tutorials/animation/introduction.rst:240 msgid "Track mode" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:245 +#: ../../docs/tutorials/animation/introduction.rst:242 msgid "In normal animations, you usually use \"Continuous\". The other types are used to script complex animations." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:248 +#: ../../docs/tutorials/animation/introduction.rst:245 msgid "The interpolation tells Godot how to calculate the frame values between the keyframes. These interpolation modes are supported:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:251 +#: ../../docs/tutorials/animation/introduction.rst:248 msgid "Nearest: Set the nearest keyframe value" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:252 +#: ../../docs/tutorials/animation/introduction.rst:249 msgid "Linear: Set the value based on a linear function calculation between the two keyframes" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:254 +#: ../../docs/tutorials/animation/introduction.rst:251 msgid "Cubic: Set the value based on a cubic function calculation between the two keyframes" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:260 +#: ../../docs/tutorials/animation/introduction.rst:257 msgid "Track interpolation" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:262 +#: ../../docs/tutorials/animation/introduction.rst:259 msgid "Cubic interpolation leads to a more natural movement, where the animation is slower at a keyframe and faster between keyframes. This is usually used for character animation. Linear interpolation creates more of a robotic movement." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:267 +#: ../../docs/tutorials/animation/introduction.rst:264 msgid "Godot supports two loop modes, which affect the animation if it's set to loop:" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:273 +#: ../../docs/tutorials/animation/introduction.rst:270 msgid "Loop modes" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:275 +#: ../../docs/tutorials/animation/introduction.rst:272 msgid "Clamp loop interpolation: When this is selected, the animation stops after the last keyframe for this track. When the first keyframe is reached again, the animation will reset to its values." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:278 +#: ../../docs/tutorials/animation/introduction.rst:275 msgid "Wrap loop interpolation: When this is selected, Godot calculates the animation after the last keyframe to reach the values of the first keyframe again." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:283 -#: ../../docs/tutorials/animation/introduction.rst:296 +#: ../../docs/tutorials/animation/introduction.rst:280 +#: ../../docs/tutorials/animation/introduction.rst:293 msgid "Keyframes for other properties" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:285 +#: ../../docs/tutorials/animation/introduction.rst:282 msgid "Godot doesn't restrict you to only edit transform properties. Every property can be used as a track where you can set keyframes." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:288 +#: ../../docs/tutorials/animation/introduction.rst:285 msgid "If you select your sprite while the animation panel is visible, you get a small keyframe button for all the sprite's properties. Click on this button and Godot automatically adds a track and keyframe to the current animation." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:299 +#: ../../docs/tutorials/animation/introduction.rst:296 msgid "Edit keyframes" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:301 +#: ../../docs/tutorials/animation/introduction.rst:298 msgid "For advanced use and to edit keyframes in detail, You can click on them to bring up the keyframe editor in the inspector. You can use this to directly edit its values." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:308 +#: ../../docs/tutorials/animation/introduction.rst:305 msgid "Keyframe editor editing a key" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:310 +#: ../../docs/tutorials/animation/introduction.rst:307 msgid "Additionally, you can also edit the easing value for this keyframe by clicking and dragging the easing setting. This tells Godot, how to change the property values when it reaches this keyframe." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:314 +#: ../../docs/tutorials/animation/introduction.rst:311 msgid "You usually tweak your animations this way, when the movement doesn't \"look right\"." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:318 +#: ../../docs/tutorials/animation/introduction.rst:315 msgid "Advanced: Call Method tracks" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:320 +#: ../../docs/tutorials/animation/introduction.rst:317 msgid "Godot's animation engine doesn't stop here. If you're already comfortable with Godot's scripting language :ref:`doc_gdscript` and :doc:`/classes/index` you know that each node type is a class and has a bunch of callable methods." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:326 +#: ../../docs/tutorials/animation/introduction.rst:323 msgid "For example, the :ref:`class_AudioStreamPlayer` node type has a method to play an audio stream." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:329 +#: ../../docs/tutorials/animation/introduction.rst:326 msgid "Wouldn't it be great to use a method at a specific keyframe in an animation? This is where \"Call Method Tracks\" come in handy. These tracks reference a node again, this time without a reference to a property. Instead, a keyframe holds the name and arguments of a method, that Godot should call when it reaches this keyframe." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:335 +#: ../../docs/tutorials/animation/introduction.rst:332 msgid "To demonstrate, we're going to use a call method track to play audio at a specific keyframe. Normally to play audio you should use an audio track, but for the sake of demonstrating methods we're going to do it this way." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:339 +#: ../../docs/tutorials/animation/introduction.rst:336 msgid "Add a :ref:`class_AudioStreamPlayer` to the Scene Tree and setup a stream using an audio file you put in your project." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:342 +#: ../../docs/tutorials/animation/introduction.rst:339 msgid "Click on \"Add track\" (|Add track|) on the animation panel's track controls." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:345 +#: ../../docs/tutorials/animation/introduction.rst:342 msgid "Select \"Add Call Method Track\" from the list of possible track types." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:350 +#: ../../docs/tutorials/animation/introduction.rst:347 msgid "Add Call Method Track" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:352 +#: ../../docs/tutorials/animation/introduction.rst:349 msgid "Select the :ref:`class_AudioStreamPlayer` node in the selection window. Godot adds the track with the reference to the node." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:358 +#: ../../docs/tutorials/animation/introduction.rst:355 msgid "Select AudioStreamPlayer" msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:360 +#: ../../docs/tutorials/animation/introduction.rst:357 msgid "Right click the timeline where Godot should play the sample and click the \"Insert Key\" option. This will bring up a list of methods that can be called for the AudioStreamPlayer node. Select the first one." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:367 +#: ../../docs/tutorials/animation/introduction.rst:364 msgid "When Godot reaches the keyframe, Godot calls the :ref:`class_AudioStreamPlayer` node's \"play\" function and the stream plays." msgstr "" -#: ../../docs/tutorials/animation/introduction.rst:371 +#: ../../docs/tutorials/animation/introduction.rst:368 msgid "You can change its position by dragging it on the timeline, you can also click on the keyframe and use the keyframe settings in the inspector." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/escn_exporter/animation.pot b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/animation.pot similarity index 62% rename from sphinx/templates/getting_started/workflow/assets/escn_exporter/animation.pot rename to sphinx/templates/tutorials/assets_pipeline/escn_exporter/animation.pot index e77fa5df16..4793badce4 100644 --- a/sphinx/templates/getting_started/workflow/assets/escn_exporter/animation.pot +++ b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/animation.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,114 +16,114 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:2 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:2 msgid "Animation" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:8 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:8 msgid "Animation supported:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:4 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:4 msgid "transform animation of all types of objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:5 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:5 msgid "transform animation of pose bones" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:6 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:6 msgid "shape key animation" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:7 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:7 msgid "light animation" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:8 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:8 msgid "camera animation" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:11 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:11 msgid "Multiple Actions For Single Object" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:12 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:12 msgid "In most games, one object would have several animations to switch between. This add-on has support for exporting multiple actions all at once into a single AnimationPlayer and makes it easy to switch actions." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:16 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:16 msgid "This workflow makes use of blender nla_tracks. Here is a brief guide on how to use this feature:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:19 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:19 msgid "**1. Stash active action**" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:21 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:21 msgid "New created action is always an active action bound to object. There are several ways to place an active action into NLA track, one is of course doing it in ``NLA Editor``" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:28 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:28 msgid "Or it can be done stashing the action in ``Dope Sheet``" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:33 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:33 msgid "**2. Check mute status of NLA tracks**" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:35 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:35 msgid "An NLA track can be ``mute`` or ``unmute``, the exporter will export all the ``mute`` NLA track as a separate action, while blends all the ``unmute`` NLA tracks into every action (including the action action) being exported." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:41 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:41 msgid "**3. Export the scene**" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:43 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:43 msgid "Make sure the ``Export Stashed Actions`` option has been turned on." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:47 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:47 msgid "Then all the stashed actions, as well as the active action, are exported to an AnimationPlayer." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:54 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:54 msgid "Constraints" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:55 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:55 msgid "Sometimes complicated animation is built with object constraint; a usual example is inverse kinematics. The add-on would automatically check if an object has some constraint; if it does, all the constraints are baked into actions and then exported along with the object." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:62 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:62 msgid "Animation Mode" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:63 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:63 msgid "Godot and Blender have different structure to store animation data. In Godot animation data is stored in an AnimationPlayer node, instead of in each animated node. In order to fix this inconsistence and still make the animation play versatile, this add-on has three animation exporting modes." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:70 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:70 msgid "**Mode 'Animation as Actions'**" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:72 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:72 msgid "Treat all the animations as object actions, so in the exported scene, every object would have its own AnimationPlayer and hold its actions." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:76 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:76 msgid "**Mode 'Scene Animation'**" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:78 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:78 msgid "If you want your animation to generate the same result as playing at Blender's timeline, this is what you want. In this mode, all the animations in the scene are placed in just one AnimationPlayer in the scene root." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:82 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:82 msgid "**Mode 'Animation as Action with Squash'**" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/animation.rst:84 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/animation.rst:84 msgid "This mode has very similar behavior of mode 'Animation as Action', but it can generate fewer AnimationPlayers; objects in parent-children relationship would share their AnimationPlayer. It is useful when you have several rigs, and each Skeleton and Mesh has actions; then one rig would have just one AnimationPlayer." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/escn_exporter/index.pot b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/index.pot similarity index 73% rename from sphinx/templates/getting_started/workflow/assets/escn_exporter/index.pot rename to sphinx/templates/tutorials/assets_pipeline/escn_exporter/index.pot index 3b70bdc87e..af1e52cdaf 100644 --- a/sphinx/templates/getting_started/workflow/assets/escn_exporter/index.pot +++ b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,38 +16,38 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:2 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:2 msgid "Blender ESCN exporter" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:4 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:4 msgid "This chapter relates to the Blender plugin called \"Godot Blender Exporter\", which can be downloaded here: https://github.com/godotengine/godot-blender-exporter" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:7 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:7 msgid "This plugin can be used to export Blender scenes in a Godot-specific scene format called ESCN, which is similar to TSCN (text format) but will be imported as binary SCN for performance." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:12 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:12 msgid "Details on exporting" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:27 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:27 msgid "Disabling specific objects" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:29 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:29 msgid "Sometimes you don't want some objects exported (e.g. high-res models used for baking). An object will not be exported if it is not rendered in the scene. This can be set in the outliner:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:35 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:35 msgid "Objects hidden in the viewport will be exported, but will be hidden in the Godot scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:40 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:40 msgid "Build pipeline integration" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/index.rst:42 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/index.rst:42 msgid "If you have hundreds of model files, you don't want your artists to waste time manually exporting their blend files. To combat this, the exporter provides a python function ``io_scene_godot.export(out_file_path)`` that can be called to export a file. This allows easy integration with other build systems. An example Makefile and python script that exports all the blends in a directory are present in the Godot-Blender-exporter repository." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/escn_exporter/lights.pot b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/lights.pot similarity index 70% rename from sphinx/templates/getting_started/workflow/assets/escn_exporter/lights.pot rename to sphinx/templates/tutorials/assets_pipeline/escn_exporter/lights.pot index f252f997e2..7e78411a01 100644 --- a/sphinx/templates/getting_started/workflow/assets/escn_exporter/lights.pot +++ b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/lights.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,38 +16,38 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:2 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:2 msgid "Lights" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:4 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:4 msgid "By default, lamps in Blender have shadows enabled. This can cause performance issues in Godot." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:8 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:8 msgid "Lamps are exported using their \"Blender Render\" settings. When Blender 2.8 is released, this will be removed and this part of the exporter will change." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:11 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:11 msgid "Sun, point and spot lamps are all exported from Blender along with many of their properties:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:16 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:16 msgid "There are some things to note:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:18 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:18 msgid "In Blender, a light casts light all the way to infinity. In Godot, it is clamped by the attenuation distance. To most closely match between the viewport and Godot, enable the \"Sphere\" checkbox. (Highlighted green)" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:21 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:21 msgid "Light attenuation models differ between Godot and Blender. The exporter attempts to make them match, but it isn't always very good." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:23 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:23 msgid "Spotlight angular attenuation models also differ between Godot and Blender. The exporter attempts to make them similar, but it doesn't always look the same." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/lights.rst:26 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/lights.rst:26 msgid "There is no difference between buffer shadow and ray shadow in the export." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/escn_exporter/material.pot b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/material.pot similarity index 69% rename from sphinx/templates/getting_started/workflow/assets/escn_exporter/material.pot rename to sphinx/templates/tutorials/assets_pipeline/escn_exporter/material.pot index 33fc734c7e..f97ed81188 100644 --- a/sphinx/templates/getting_started/workflow/assets/escn_exporter/material.pot +++ b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/material.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,82 +16,82 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:2 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:2 msgid "Materials" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:5 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:5 msgid "Using existing Godot materials" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:7 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:7 msgid "One way in which the exporter can handle materials is to attempt to match the Blender material with an existing Godot material. This has the advantage of being able to use all of the features of Godot's material system, but it means that you cannot see your model with the material applied inside Blender." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:12 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:12 msgid "To do this, the exporter attempts to find Godot materials with names that match those of the material name in Blender. So if you export an object in Blender with the material name ``PurpleDots`` then the exporter will search for the file ``PurpleDots.tres`` and assign it to the object. If this file is not a ``SpatialMaterial`` or ``ShaderMaterial`` or if it cannot be found, then the exporter will fall back to exporting the material from Blender." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:20 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:20 msgid "Where the exporter searches for the ``.tres`` file is determined by the \"Material Search Paths\" option:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:34 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:34 msgid "This can take the value of:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:26 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:26 msgid "Project Directory - Attempts to find the ``project.Godot`` and recursively searches through subdirectories. If ``project.Godot`` cannot be found it will throw an error. This is useful for most projects where naming conflicts are unlikely." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:30 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:30 msgid "Export Directory - Look for materials in subdirectories of the export location. This is useful for projects where you may have duplicate material names and need more control over what material gets assigned." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:33 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:33 msgid "None - Do not search for materials. Export them from the Blender file." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:37 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:37 msgid "Export of Cycles/EEVEE materials" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:39 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:39 msgid "The exporter has a primitive support for converting Cycles/EEVEE material node tree to Godot Shader Material. Note that some of the Shader Node are not supported yet due to difficulties in implementation, which are:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:43 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:43 msgid "all the ``noisy textures``" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:44 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:44 msgid "``generated texture coordinates``" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:45 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:45 msgid "``group node``" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:46 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:46 msgid "shader nodes except ``PrincipledBSDF``, ``Diffuse``, ``Glossy``, ``Glass``, ``add shader`` and ``mix shader``" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:50 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:50 msgid "If possible, try to use PrincipledBSDF node with GGX distribution as the output shader node, it is the only one guaranteed to be exactly correct. Others are just based on approximation." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:53 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:53 msgid "Sometimes materials may not be valid for exporting (e.g. has some unsupported node) or it is using Blender Internal Engine, only the diffuse color and a few flags (e.g. unshaded) are exported and form a Spatial Material." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:59 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:59 msgid "Generate external materials" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:61 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:61 msgid "The default configuration of material exporting would keep all the materials internal to the ``escn`` file. There is an option which could enable generating external ``.material`` file when the ``escn`` file opens in Godot." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/material.rst:67 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/material.rst:67 msgid "``.material`` file can be assigned to any material slot to be a external resource." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/escn_exporter/mesh.pot b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/mesh.pot similarity index 75% rename from sphinx/templates/getting_started/workflow/assets/escn_exporter/mesh.pot rename to sphinx/templates/tutorials/assets_pipeline/escn_exporter/mesh.pot index 86e82809a8..347c6301c9 100644 --- a/sphinx/templates/getting_started/workflow/assets/escn_exporter/mesh.pot +++ b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/mesh.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,26 +16,26 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:2 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/mesh.rst:2 msgid "Mesh" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:5 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/mesh.rst:5 msgid "Modifiers" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:6 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/mesh.rst:6 msgid "There is an exporting option :code:`Apply Modifiers` to control whether mesh modifiers are applied to the exported mesh." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:11 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/mesh.rst:11 msgid "Shape Key" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:12 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/mesh.rst:12 msgid "Exporting mesh shape key is supported, however exporting each shape key is almost like exporting the mesh again, so don't be surprised it takes a relatively long time." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/mesh.rst:17 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/mesh.rst:17 msgid "A lot of modifiers are not compatible with shape keys (e.g. subsurface modifier), so if you found you have incorrect shape keys exported, try to disable :code:`Apply Modifiers` and do the exporting again. Besides, it is worthwhile to report the incompatible modifier to the `issue list `__, which helps to develop the exporter to have a more precise check of modifiers." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/escn_exporter/physics.pot b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/physics.pot similarity index 70% rename from sphinx/templates/getting_started/workflow/assets/escn_exporter/physics.pot rename to sphinx/templates/tutorials/assets_pipeline/escn_exporter/physics.pot index b27ef3f516..9bc62e9775 100644 --- a/sphinx/templates/getting_started/workflow/assets/escn_exporter/physics.pot +++ b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/physics.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,58 +16,58 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:2 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:2 msgid "Physics properties" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:4 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:4 msgid "Exporting physics properties is done by enabling \"Rigid Body\" in Blender's physics tab:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:10 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:10 msgid "By default, a single Blender object with rigid body enabled will export as three nodes: a PhysicsBody, a CollisionShape, and a MeshInstance." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:14 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:14 msgid "Body type" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:16 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:16 msgid "Blender only has the concept of \"Active\" and \"Passive\" rigid bodies. These turn into Static and RigidBody nodes. To create a kinematic body, enable the \"animated\" checkbox on an \"Active\" body:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:23 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:23 msgid "Collision shapes" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:25 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:25 msgid "Many of the parameters for collision shapes are missing from Blender, and many of the collision shapes are also not present. However, almost all of the options in Blender's rigid body collision and rigid body dynamics interfaces are supported:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:39 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:39 msgid "There are the following caveats:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:33 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:33 msgid "Not all of the collision shapes are supported. Only ``Mesh``, ``Convex Hull``, ``Capsule``, ``Sphere`` and ``Box`` are supported in both Blender and Godot" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:36 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:36 msgid "In Godot, you can have different collision groups and collision masks. In Blender you only have collision groups. As a result, the exported object's collision mask is equal to its collision group. Most of the time, this is what you want." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:42 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:42 msgid "To build compound physics shapes, parent together multiple objects with rigid body enabled. The physics properties are taken from the parent-most rigid body, and the rest are used as collision shapes." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:47 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:47 msgid "Collision geometry only" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:49 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:49 msgid "Frequently you want different geometry for your collision meshes and your graphical meshes, but by default, the exporter will export a mesh along with the collision shape. To only export the collision shape, set the object's maximum draw type to Wire:" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/physics.rst:56 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/physics.rst:56 msgid "This will also influence how the object is shown in Blender's viewport. Most of the time, you want your collision geometry to be shown see-through when working on the models, so this works out fairly nicely." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/escn_exporter/skeleton.pot b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/skeleton.pot similarity index 68% rename from sphinx/templates/getting_started/workflow/assets/escn_exporter/skeleton.pot rename to sphinx/templates/tutorials/assets_pipeline/escn_exporter/skeleton.pot index df29e95773..997a208166 100644 --- a/sphinx/templates/getting_started/workflow/assets/escn_exporter/skeleton.pot +++ b/sphinx/templates/tutorials/assets_pipeline/escn_exporter/skeleton.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,46 +16,46 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:2 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:2 msgid "Skeleton" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:7 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:7 msgid "Rest Bone" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:9 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:9 msgid "Armature object in Blender is exported as a Skeleton node along with rest position (transform in Godot) of bones." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:13 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:13 msgid "The three check boxes :code:`Inherit Rotation`, :code:`Inherit Scale`, :code:`Local Location` (colored in red) must be ticked when building armature in Blender, so that the exported bone transform be consistent between Blender and Godot" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:18 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:18 msgid "It is important that the mesh is not deformed by bones when exporting in Blender. Make sure that the skeleton is reset to its T-pose or default rest pose." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:22 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:22 msgid "Bone Weights" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:24 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:24 msgid "Blender put rigged mesh vertices which has no bone weights at its original position, but these vertices would be placed at (0, 0, 0) in Godot, making the mesh deformed. Therefore, the exporter would raise an error for any vertex with no bone weights detected in a rigged mesh." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:30 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:30 msgid "Non-Deform Bone" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:32 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:32 msgid "Note that the non-deform bone can be configured as not exported by enabling the :code:`Exclude Control Bones`; the deform bone checkbox is shown in the picture." msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:38 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:38 msgid "Bone Attachment" msgstr "" -#: ../../docs/getting_started/workflow/assets/escn_exporter/skeleton.rst:39 +#: ../../docs/tutorials/assets_pipeline/escn_exporter/skeleton.rst:39 msgid "A bone can be the parent of an object in Blender; this relation is exported as a BoneAttachment node in the Godot scene." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/exporting_3d_scenes.pot b/sphinx/templates/tutorials/assets_pipeline/exporting_3d_scenes.pot similarity index 64% rename from sphinx/templates/getting_started/workflow/assets/exporting_3d_scenes.pot rename to sphinx/templates/tutorials/assets_pipeline/exporting_3d_scenes.pot index dba37574b4..442fb449c6 100644 --- a/sphinx/templates/getting_started/workflow/assets/exporting_3d_scenes.pot +++ b/sphinx/templates/tutorials/assets_pipeline/exporting_3d_scenes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,46 +16,46 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:4 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:4 msgid "Exporting 3D scenes" msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:7 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:7 msgid "Overview" msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:9 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:9 msgid "In Godot it is possible to export 3D scenes as a glTF 2.0 file. You can export as a glTF binary (``.glb`` file) or glTF embedded with textures (``gltf`` + ``.bin`` + textures). This allows you to create scenes in Godot, such as a CSG mesh blockout for a level, export it to clean it up in a program such as Blender, and then bring it back into Godot." msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:17 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:17 msgid "Only Blender 2.83 and newer can import glTF files exported by Godot." msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:19 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:19 msgid "To export a scene in the editor go to **Project > Tools > Export GLTF...**" msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:24 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:24 msgid "Limitations" msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:26 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:26 msgid "There are several limitations with glTF export." msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:28 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:28 msgid "No support for exporting particles since their implementation varies across engines." msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:29 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:29 msgid "ShaderMaterials cannot be exported." msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:30 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:30 msgid "No support for exporting 2D scenes." msgstr "" -#: ../../docs/getting_started/workflow/assets/exporting_3d_scenes.rst:31 +#: ../../docs/tutorials/assets_pipeline/exporting_3d_scenes.rst:31 msgid "Only supported in editor builds (``tools=yes``)." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/import_process.pot b/sphinx/templates/tutorials/assets_pipeline/import_process.pot similarity index 72% rename from sphinx/templates/getting_started/workflow/assets/import_process.pot rename to sphinx/templates/tutorials/assets_pipeline/import_process.pot index ab6b6bd622..d9c649d545 100644 --- a/sphinx/templates/getting_started/workflow/assets/import_process.pot +++ b/sphinx/templates/tutorials/assets_pipeline/import_process.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,106 +16,106 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/import_process.rst:4 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:4 msgid "Import process" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:7 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:7 msgid "Importing assets in Godot 3.0+" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:9 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:9 msgid "Previously, importing assets in Godot 2.x required manual maintenance of a separate directory with source assets. Without doing this, it was impossible to specify how to convert and change import flags for textures, audio files, scenes, etc." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:14 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:14 msgid "In Godot 3.0+, we use a more modern approach to importing: Simply drop your assets (image files, scenes, audio files, fonts, etc) directly in the project folder (copy them manually with your OS file explorer). Godot will automatically import these files internally and keep the imported resources hidden in a ``res://.import`` folder." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:20 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:20 msgid "This means that when trying to access imported assets through code you need to use the :ref:`Resource Loader` as it will automatically take into account where the internal files are saved. If you try and access an imported asset using the :ref:`File ` class it will work in the editor, but break in the exported project." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:26 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:26 msgid "However, the :ref:`Resource Loader` cannot access non imported files, only the :ref:`File ` class can." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:30 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:30 msgid "Changing import parameters" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:32 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:32 msgid "To change the import parameters of an asset in Godot (again, keep in mind import parameters are only present in non-native Godot resource types) select the relevant resource in the filesystem dock:" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:38 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:38 msgid "Then, after adjusting the parameters, press \"Reimport\". These parameters will only be used for this asset and on future reimports." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:41 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:41 msgid "Changing the import parameters of several assets at the same time is also possible. Simply select all of them together in the resources dock and the exposed parameters will apply to all of them when reimporting." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:46 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:46 msgid "Reimporting multiple assets" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:48 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:48 msgid "While working on a project you may find that several assets need to have the same parameters changed, such as enabling mipmaps, but you only want those specific parameters changed. To do this, select every asset you want to reimport in the file system. In the import tab there will now be a checkbox to the left of every import parameter." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:56 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:56 msgid "Select the checkbox of the parameters you want to change on your imported assets, then change the parameters normally. Finally, click the reimport button and every selected asset will be reimported with only those parameters changed." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:62 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:62 msgid "Automatic reimport" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:64 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:64 msgid "When the MD5 checksum of the source asset changes, Godot will perform an automatic reimport of it, applying the preset configured for that specific asset." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:69 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:69 msgid "Files generated" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:71 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:71 msgid "Importing will add an extra ``.import`` file, containing the import configuration. Make sure to commit these to your version control system!" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:76 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:76 msgid "Additionally, extra assets will be preset in the hidden ``res://.import`` folder:" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:80 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:80 msgid "If any of the files present in this folder is erased (or the whole folder), the asset or assets will be reimported automatically. As such, committing this folder to the version control system is optional. It can shorten reimporting time when checking out on another computer, but it takes considerably more space and transfer time. Pick your poison!" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:87 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:87 msgid "Changing import resource type" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:89 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:89 msgid "Some source assets can be imported as different types of resources. For this, select the relevant type of resource desired and press \"Reimport\":" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:97 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:97 msgid "Changing default import parameters" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:99 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:99 msgid "Different types of games might require different defaults. Changing the defaults per project can be achieved by using the \"Preset..\" Menu. Besides some resource types offering presets, the default setting can be saved and cleared too:" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:107 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:107 msgid "Simplicity is key!" msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:109 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:109 msgid "This is a very simple workflow which should take very little time to get used to. It also enforces a more correct way to deal with resources." msgstr "" -#: ../../docs/getting_started/workflow/assets/import_process.rst:112 +#: ../../docs/tutorials/assets_pipeline/import_process.rst:112 msgid "There are many types of assets available for import, so please continue reading to understand how to work with all of them!" msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/importing_audio_samples.pot b/sphinx/templates/tutorials/assets_pipeline/importing_audio_samples.pot similarity index 58% rename from sphinx/templates/getting_started/workflow/assets/importing_audio_samples.pot rename to sphinx/templates/tutorials/assets_pipeline/importing_audio_samples.pot index 19decbd6f8..eb6aa25292 100644 --- a/sphinx/templates/getting_started/workflow/assets/importing_audio_samples.pot +++ b/sphinx/templates/tutorials/assets_pipeline/importing_audio_samples.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,130 +16,130 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:4 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:4 msgid "Importing audio samples" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:7 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:7 msgid "Supported files" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:9 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:9 msgid "Godot provides three options to import your audio data: WAV, Ogg Vorbis and MP3." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:12 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:12 msgid "Each has different advantages." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:14 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:14 msgid "WAV files use raw data or light compression (IMA-ADPCM). They are lightweight on the CPU to play back (hundreds of simultaneous voices in this format are fine). The downside is that they take up a lot of disk space." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:17 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:17 msgid "Ogg Vorbis files use a stronger compression that results in much smaller file size, but require significantly more processing power to play back." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:20 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:20 msgid "MP3 files use better compression than WAV with IMA-ADPCM, but worse than Ogg Vorbis. This means that a MP3 file with roughly equal quality to Ogg Vorbis will be significantly larger. On the bright side, MP3 requires less CPU usage to play back compared to Ogg Vorbis. This makes MP3 useful for mobile and HTML5 projects where CPU resources are limited, especially when playing multiple compressed sounds at the same time (such as long ambient sounds)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:28 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:28 msgid "Here is a comparative chart." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:31 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:31 msgid "Format" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:31 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:31 msgid "1 second of audio" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:33 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:33 msgid "WAV 24-bit, 96 kHz, stereo" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:33 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:33 msgid "576 KB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:35 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:35 msgid "WAV 16-bit, 44 kHz, mono" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:35 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:35 msgid "88 KB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:37 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:37 msgid "WAV 16-bit, IMA-ADPCM, mono" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:37 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:37 msgid "22 KB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:39 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:39 msgid "MP3 192 Kb/s, stereo" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:39 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:39 msgid "24 KB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:41 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:41 msgid "Ogg Vorbis 128 Kb/s, stereo" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:41 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:41 msgid "16 KB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:43 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:43 msgid "Ogg Vorbis 96 Kb/s, stereo" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:43 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:43 msgid "12 KB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:46 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:46 msgid "Consider using WAV for short and repetitive sound effects, and Ogg Vorbis for music, speech, and long sound effects." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:50 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:50 msgid "Best practices" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:52 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:52 msgid "Godot has an :ref:`extensive bus system ` with built-in effects. This saves SFX artists the need to add reverb to the sound effects, reducing their size greatly and ensuring correct trimming. Say no to SFX with baked reverb!" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:59 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:59 msgid "As you can see above, sound effects become huge with reverb added." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:62 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:62 msgid "Trimming" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:64 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:64 msgid "One issue that happens often is that the waveform is exported with long silences at the beginning and at the end. These are inserted by DAWs when saving to a waveform, increase their size unnecessarily and add latency to the moment they are played back." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:69 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:69 msgid "Importing as WAV with the **Trimming** option enabled solves this." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:73 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:73 msgid "Looping" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:75 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:75 msgid "Godot supports looping in the samples (tools such as Sound Forge or Audition can add loop points to WAV files). This is useful for sound effects, such as engines, machine guns etc. Ping-pong looping is also supported." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_audio_samples.rst:80 +#: ../../docs/tutorials/assets_pipeline/importing_audio_samples.rst:80 msgid "As an alternative, the Import dock has a **Loop** option that enables looping for the entire sample when importing." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/importing_images.pot b/sphinx/templates/tutorials/assets_pipeline/importing_images.pot similarity index 59% rename from sphinx/templates/getting_started/workflow/assets/importing_images.pot rename to sphinx/templates/tutorials/assets_pipeline/importing_images.pot index 55c2244497..a17ef124b0 100644 --- a/sphinx/templates/getting_started/workflow/assets/importing_images.pot +++ b/sphinx/templates/tutorials/assets_pipeline/importing_images.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,376 +16,376 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:4 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:4 msgid "Importing images" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:7 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:7 msgid "Supported image formats" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:9 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:9 msgid "Godot can import the following image formats:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:11 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:11 msgid "BMP (``.bmp``) - No support for 16-bit per pixel images. Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:13 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:13 msgid "DirectDraw Surface (``.dds``) - If mipmaps are present in the texture, they will be loaded directly. This can be used to achieve effects using custom mipmaps." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:16 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:16 msgid "OpenEXR (``.exr``) - Supports HDR (highly recommended for panorama skies)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:18 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:18 msgid "Radiance HDR (``.hdr``) - Supports HDR (highly recommended for panorama skies)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:20 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:20 msgid "JPEG (``.jpg``, ``.jpeg``) - Doesn't support transparency per the format's limitations." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:22 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:22 msgid "PNG (``.png``) - Precision is limited to 8 bits per channel upon importing (no HDR images)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:24 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:24 msgid "Truevision Targa (``.tga``)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:25 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:25 msgid "SVG (``.svg``, ``.svgz``) - SVGs are rasterized using `NanoSVG `__ when importing them. Support is limited; complex vectors may not render correctly. For complex vectors, rendering them to PNGs using Inkscape is often a better solution. This can be automated thanks to its `command-line interface `__." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:30 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:30 msgid "WebP (``.webp``) - WebP files support transparency and can be compressed lossily or losslessly. The precision is limited to 8 bits per channel." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:36 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:36 msgid "If you've compiled the Godot editor from source with specific modules disabled, some formats may not be available." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:40 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:40 msgid "Importing textures" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:42 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:42 msgid "The default action in Godot is to import images as textures. Textures are stored in video memory and can't be accessed directly. This is what makes drawing them efficient." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:46 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:46 msgid "Import options are vast:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:51 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:51 msgid "Detect 3D" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:53 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:53 msgid "This option makes Godot be aware of when a texture (which is imported for 2D as default) is used in 3D. If this happens, setting are changed so the texture flags are friendlier to 3D (mipmaps, filter and repeat become enabled and compression is changed to VRAM). Texture is also reimported automatically." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:57 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:57 msgid "Compression" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:59 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:59 msgid "Images are one of the largest assets in a game. To handle them efficiently, they need to be compressed. Godot offers several compression methods, depending on the use case." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:63 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:63 msgid "Compress Mode" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:65 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:65 msgid "**VRAM Compression:** This is the most common compression mode for 3D assets. Size on disk is reduced and video memory usage is also decreased considerably (usually by a factor between 4 and 6). This mode should be avoided for 2D as it exhibits noticeable artifacts." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:69 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:69 msgid "**Lossless Compression:** This is the most common compression mode for 2D assets. It shows assets without any kind of artifacting, and disk compression is decent. It will use considerably more amount of video memory than VRAM Compression, though. This is also the recommended setting for pixel art." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:73 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:73 msgid "**Lossy Compression:** This is a good choice for large 2D assets. It has some artifacts, but less than VRAM and the file size is several times lower compared to Lossless or Uncompressed. Video memory usage isn't decreased by this mode; it's the same as with Lossless Compression or Uncompressed." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:77 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:77 msgid "**Uncompressed:** Only useful for formats that can't be compressed (such as raw float images)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:80 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:80 msgid "In this table, each of the four options are described together with their advantages and disadvantages (|good| = best, |bad| = worst):" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:84 msgid "Uncompressed" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:84 msgid "Compress Lossless" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:84 msgid "Compress Lossy" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:84 msgid "Compress VRAM" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:86 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:86 msgid "Description" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:86 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:86 msgid "Stored as raw pixels" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:86 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:86 msgid "Stored as Lossless WebP / PNG" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:86 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:86 msgid "Stored as Lossy WebP" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:86 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:86 msgid "Stored as S3TC/BC or PVRTC/ETC depending on platform" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:88 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:88 msgid "Size on Disk" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:88 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:90 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:90 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:90 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:88 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:90 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:90 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:90 msgid "|bad| Large" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:88 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:88 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:88 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:88 msgid "|regular| Small" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:88 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:88 msgid "|good| Very Small" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:90 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:90 msgid "Memory Usage" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:90 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:90 msgid "|good| Small" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:92 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:92 msgid "Performance" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:92 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:92 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:92 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:96 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:92 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:92 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:92 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:96 msgid "|regular| Normal" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:92 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:96 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:92 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:96 msgid "|good| Fast" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:94 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:94 msgid "Quality Loss" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:94 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:94 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:94 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:94 msgid "|good| None" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:94 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:94 msgid "|regular| Slight" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:94 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:94 msgid "|bad| Moderate" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:96 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:96 msgid "Load Time" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:96 -#: ../../docs/getting_started/workflow/assets/importing_images.rst:96 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:96 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:96 msgid "|bad| Slow" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:106 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:106 msgid "HDR Mode" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:108 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:108 msgid "Godot supports high dynamic range textures (as .HDR or .EXR). These are mostly useful as high dynamic range equirectangular panorama skies (the internet has plenty if you search for them), which replace Cubemaps in Godot 2.x. Modern PCs support the BC6H VRAM format, but there are still plenty that do not." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:111 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:111 msgid "If you want Godot to ensure full compatibility in terms of the kind of textures, enable the \"Force RGBE\" option." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:114 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:114 msgid "Normal Map" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:116 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:116 msgid "When using a texture as normal map, only the red and green channels are required. Given regular texture compression algorithms produce artifacts that don't look that nice in normal maps, the RGTC compression format is the best fit for this data. Forcing this option to \"Enabled\" will make Godot import the image as RGTC compressed. By default, it's set to \"Detect\", which means that if the texture is ever used as a normal map, it will be changed to \"Enabled\" and reimported automatically." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:121 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:121 msgid "Note that RGTC compression affects the resulting normal map image. You will have to adjust custom shaders that use the normal map to take this into account." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:125 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:125 msgid "Godot requires the normal map to use the X+, Y- and Z+ coordinates. In other words, if you've imported a material made to be used with another engine, you may have to convert the normal map so its Y axis is flipped. Otherwise, the normal map direction may appear to be inverted on the Y axis." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:130 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:130 msgid "More information about normal maps (including a coordinate order table for popular engines) can be found `here `__." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:135 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:135 msgid "Flags" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:137 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:137 msgid "There are plenty of settings that can be toggled when importing an image as a texture, depending on the use case." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:140 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:140 msgid "Repeat" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:142 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:142 msgid "This setting is most commonly used in 3D, and is therefore generally disabled in 2D. It sets UV coordinates going beyond the 0,0 - 1,1 range to \"loop\"." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:144 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:144 msgid "Repeating can optionally be set to mirrored mode." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:147 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:147 msgid "Filter" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:149 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:149 msgid "When pixels become larger than the screen pixels, this option enables linear interpolation for them. The result is a smoother (less blocky) texture. This setting can be commonly used in 2D and 3D, but it's usually disabled when making pixel perfect games." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:152 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:152 msgid "Mipmaps" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:154 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:154 msgid "When pixels become smaller than the screen, mipmaps kick in. This helps reduce the grainy effect when shrinking the textures. Keep in mind that, in older hardware (GLES2, mainly mobile), there are some requirements to use mipmaps:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:157 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:157 msgid "Texture width and height must be powers of 2" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:158 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:158 msgid "Repeat must be enabled" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:160 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:160 msgid "Keep in mind the above when making phone games and applications, want to aim for full compatibility, and need mipmaps." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:162 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:162 msgid "When doing 3D, mipmap should be turned on, as this also improves performance (smaller versions of the texture are used for objects further away)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:165 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:165 msgid "Anisotropic" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:167 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:167 msgid "When textures are near parallel to the view (like floors), this option makes them have more detail by reducing blurriness." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:170 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:170 msgid "sRGB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:172 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:172 msgid "Godot uses Linear colorspace when rendering 3D. Textures mapped to albedo or detail channels need to have this option turned on in order for colors to look correct. When set to **Detect** mode, the texture will be marked as sRGB when used in albedo channels." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:177 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:177 msgid "Since the texture will have its data modified when sRGB is enabled, this means using the same texture in both 2D and 3D will make the texture display with incorrect colors in either 2D or 3D." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:181 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:181 msgid "To work around this, make a copy of the texture on the filesystem and enable sRGB on one of the copies only. Use the copy with sRGB enabled in 3D, and the copy with sRGB disabled in 2D." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:186 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:186 msgid "Process" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:188 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:188 msgid "Some special processes can be applied to images when imported as textures." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:191 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:191 msgid "Fix Alpha Border" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:193 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:193 msgid "This puts pixels of the same surrounding color in transition from transparency to non transparency. It helps mitigate the outline effect when exporting images from Photoshop and the like." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:198 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:198 msgid "It's a good idea to leave it on by default, unless specific values are needed." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:201 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:201 msgid "Premultiplied Alpha" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:203 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:203 msgid "An alternative to fix darkened borders is to use premultiplied alpha. By enabling this option, the texture will be converted to this format. Keep in mind that a material will need to be created that uses the PREMULT ALPHA blend mode on canvas items that need it." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:207 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:207 msgid "HDR as sRGB" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:209 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:209 msgid "A few HDR files are broken and contain sRGB color data. It is advised not to use them, but, in the worst-case scenario, toggling this option on will make them look right." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:212 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:212 msgid "Invert Color" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:214 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:214 msgid "Reverses the image's color. This is useful, for example, to convert a height map generated by external programs to depth map to use with :ref:`doc_spatial_material`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:217 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:217 msgid "Svg" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:220 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:220 msgid "Scale" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_images.rst:222 +#: ../../docs/tutorials/assets_pipeline/importing_images.rst:222 msgid "This option only applies to SVG files. It controls the scale of the SVG image. The default scale (1.0) will make the imported SVG match its original design scale." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/importing_scenes.pot b/sphinx/templates/tutorials/assets_pipeline/importing_scenes.pot similarity index 66% rename from sphinx/templates/getting_started/workflow/assets/importing_scenes.pot rename to sphinx/templates/tutorials/assets_pipeline/importing_scenes.pot index 11e3af5be9..ae72174a13 100644 --- a/sphinx/templates/getting_started/workflow/assets/importing_scenes.pot +++ b/sphinx/templates/tutorials/assets_pipeline/importing_scenes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,641 +16,641 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:4 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:4 msgid "Importing 3D scenes" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:7 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:7 msgid "Godot scene importer" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:9 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:9 msgid "When dealing with 3D assets, Godot has a flexible and configurable importer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:11 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:11 msgid "Godot works with *scenes*. This means that the entire scene being worked on in your favorite 3D DCC will be transferred as close as possible." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:14 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:14 msgid "Godot supports the following 3D *scene file formats*:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:16 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:16 msgid "glTF 2.0 **(recommended)**. Godot has full support for both text (``.gltf``) and binary (``.glb``) formats." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:17 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:17 msgid "DAE (COLLADA), an older format that is fully supported." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:18 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:18 msgid "OBJ (Wavefront) format + their MTL material files. This is also fully supported, but pretty limited (no support for pivots, skeletons, animations, PBR materials, ...)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:19 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:19 msgid "ESCN, a Godot-specific format that Blender can export with a plugin." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:20 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:20 msgid "FBX, supported via the Open Asset Import library. However, FBX is proprietary, so we recommend using other formats listed above, if suitable for your workflow." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:23 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:23 msgid "Just copy the scene file together with the texture to the project repository, and Godot will do a full import." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:25 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:25 msgid "It is important that the mesh is not deformed by bones when exporting. Make sure that the skeleton is reset to its T-pose or default rest pose before exporting with your favorite 3D editor." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:29 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:29 msgid "Exporting DAE files from Maya and 3DS Max" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:31 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:31 msgid "Autodesk added built-in COLLADA support to Maya and 3DS Max, but it's broken by default and should not be used. The best way to export this format is by using the `OpenCollada `__ plugins. They work well, although they are not always up-to date with the latest version of the software." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:39 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:39 msgid "Exporting glTF 2.0 files from Blender" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:41 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:41 msgid "There are three ways to export glTF files from Blender. As a glTF binary (``.glb`` file), glTF embedded (``.gltf`` file), and with textures (``gltf`` + ``.bin`` + textures)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:44 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:44 msgid "glTF binary files are the smallest of the three options. They include the mesh and textures set up in Blender. When brought into Godot the textures are part of the object's material file." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:47 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:47 msgid "glTF embedded files function the same way as binary files. They don't provide extra functionality in Godot, and shouldn't be used since they have a larger file size." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:50 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:50 msgid "There are two reasons to use glTF with the textures separate. One is to have the scene description in a text based format and the binary data in a separate binary file. This can be useful for version control if you want to review changes in a text based format. The second is you need the texture files separate from the material file. If you don't need either of those glTF binary files are fine." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:57 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:57 msgid "Blender does not export emissive textures with the glTF file. If your model uses one, it must be brought in separately." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:60 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:60 msgid "By default, Blender has backface culling disabled on materials and will export materials to match how they render in Blender. This means that materials in Godot will have their cull mode set to **Disabled**. This can decrease performance since backfaces will be rendered, even when they are being culled by other faces. To resolve this, enable **Backface Culling** in Blender's Materials tab, then export the scene to glTF again." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:68 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:68 msgid "Exporting DAE files from Blender" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:70 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:70 msgid "Blender has built-in COLLADA support, but it does not work properly for the needs of game engines and should not be used as is." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:73 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:73 msgid "Godot provides a `Blender plugin `_ that will correctly export COLLADA scenes for use in Godot. It does not work in Blender 2.8 or newer, but there are plans to update it in the future." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:78 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:78 msgid "Exporting ESCN files from Blender" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:80 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:80 msgid "The most powerful one, called `godot-blender-exporter `__. It uses a .escn file, which is kind of another name for a .tscn file (Godot scene file); it keeps as much information as possible from a Blender scene. However, it is considered experimental." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:86 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:86 msgid "The ESCN exporter has a detailed `document `__ describing its functionality and usage." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:90 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:90 msgid "Exporting textures separately" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:92 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:92 msgid "While textures can be exported with a model in certain file formats, such as glTF 2.0, you can also export them separately. Godot uses PBR (physically based rendering) for its materials, so if a texturing program can export PBR textures, they can work in Godot. This includes the `Substance suite `__, `ArmorPaint (open source) `__, and `Material Maker (open source) `__." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:97 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:97 msgid "For more information on Godot's materials, see :ref:`doc_spatial_material`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:100 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:100 msgid "Exporting considerations" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:102 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:102 msgid "Since GPUs can only render triangles, meshes that contain quads or N-gons have to be *triangulated* before they can be rendered. Godot can triangulate meshes on import, but results may be unpredictable or incorrect, especially with N-gons. Regardless of the target application, triangulating *before* exporting the scene will lead to more consistent results and should be done whenever possible." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:109 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:109 msgid "To avoid issues with incorrect triangulation after importing in Godot, it is recommended to make the 3D DCC triangulate objects on its own. In Blender, this can be done by adding a Triangulate modifier to your objects and making sure **Apply Modifiers** is checked in the export dialog. Alternatively, depending on the exporter, you may be able to find and enable a **Triangulate Faces** option in the export dialog." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:116 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:116 msgid "To avoid issues with 3D selection in the editor, it is recommended to apply the object transform in the 3D DCC before exporting the scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:120 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:120 msgid "Import workflows" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:122 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:122 msgid "Godot scene importer allows different workflows regarding how data is imported. Depending on many options, it is possible to import a scene with:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:125 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:125 msgid "External materials (default): Where each material is saved to a file resource. Modifications to them are kept." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:126 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:126 msgid "External meshes: Where each mesh is saved to a different file. Many users prefer to deal with meshes directly." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:127 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:127 msgid "External animations: Allowing saved animations to be modified and merged when sources change." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:128 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:128 msgid "External scenes: Save each of the root nodes of the imported scenes as a separate scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:129 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:129 msgid "Single scene: A single scene file with everything built in." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:133 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:133 msgid "As different developers have different needs, this import process is highly customizable." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:136 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:136 msgid "Import options" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:138 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:138 msgid "The importer has several options, which will be discussed below:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:143 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:143 msgid "Nodes" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:146 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:146 msgid "Root Type" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:148 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:148 msgid "By default, the type of the root node in imported scenes is \"Spatial\", but this can be modified." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:151 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:151 msgid "Root Name" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:153 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:153 msgid "Allows setting a specific name to the generated root node." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:156 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:156 msgid "Root Scale" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:158 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:158 msgid "The scale of the root node." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:161 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:161 msgid "Custom Script" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:163 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:163 msgid "A special script to process the whole scene after import can be provided. This is great for post processing, changing materials, doing funny stuff with the geometry etc." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:167 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:167 msgid "Create a script like this:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:179 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:179 msgid "The ``post_import`` function takes the imported scene as argument (the parameter is actually the root node of the scene). The scene that will finally be used must be returned. It can be a different one." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:184 -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:203 -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:268 -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:366 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:184 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:203 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:268 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:366 msgid "Storage" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:186 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:186 msgid "By default, Godot imports a single scene. This option allows specifying that nodes below the root will each be a separate scene and instanced into the imported one." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:190 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:190 msgid "Of course, instancing such imported scenes in other places manually works, too." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:194 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:194 msgid "Materials" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:197 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:197 msgid "Location" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:199 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:199 msgid "Godot supports materials in meshes or nodes. By default, materials will be put on each node." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:205 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:205 msgid "Materials can be stored within the scene or in external files. By default, they are stored in external files so editing them is possible. This is because most 3D DCCs don't have the same material options as those present in Godot." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:209 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:209 msgid "When materials are built-in, they will be lost each time the source scene is modified and re-imported." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:214 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:214 msgid "Godot will not reimport materials that are stored in external files unless you remove the associated ``.material`` file before reimporting." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:217 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:217 msgid "To force reimporting materials every time the 3D scene is reimported, change the material storage mode in the 3D scene by selecting it in the FileSystem dock, going to the Import dock then setting **Material > Storage** to **Built-In** instead of **Files**." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:223 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:223 msgid "Keep On Reimport" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:225 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:225 msgid "Once materials are edited to use Godot features, the importer will keep the edited ones and ignore the ones coming from the source scene. This option is only present if materials are saved as files." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:230 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:230 msgid "Meshes" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:233 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:233 msgid "Compress" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:235 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:235 msgid "Makes meshes use less precise numbers for multiple aspects of the mesh in order to save space." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:248 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:248 msgid "These are:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:239 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:239 msgid "Transform Matrix (Location, rotation, and scale) : 32-bit float to 16-bit signed integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:240 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:240 msgid "Vertices : 32-bit float to 16-bit signed integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:241 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:241 msgid "Normals : 32-bit float to 32-bit unsigned integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:242 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:242 msgid "Tangents : 32-bit float to 32-bit unsigned integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:243 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:243 msgid "Vertex Colors : 32-bit float to 32-bit unsigned integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:244 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:244 msgid "UV : 32-bit float to 32-bit unsigned integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:245 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:245 msgid "UV2 : 32-bit float to 32-bit unsigned integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:246 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:246 msgid "Vertex weights : 32-bit float to 16-bit unsigned integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:247 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:247 msgid "Armature bones : 32-bit float to 16-bit unsigned integer." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:248 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:248 msgid "Array index : 32-bit or 16-bit unsigned integer based on how many elements there are." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:252 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:252 msgid "Additional info:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:251 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:251 msgid "UV2 = The second UV channel for detail textures and baked lightmap textures." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:252 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:252 msgid "Array index = An array of numbers that number each element of the arrays above; i.e. they number the vertices and normals." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:254 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:254 msgid "In some cases, this might lead to loss of precision, so disabling this option may be needed. For instance, if a mesh is very big or there are multiple meshes being imported that cover a large area, compressing the import of this mesh(es) may lead to gaps in geometry or vertices not being exactly where they should be." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:260 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:260 msgid "Ensure Tangents" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:262 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:262 msgid "If textures with normal mapping are to be used, meshes need to have tangent arrays. This option ensures that these are generated if not present in the source scene. Godot uses Mikktspace for this, but it's always better to have them generated in the exporter." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:270 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:270 msgid "Meshes can be stored in separate files (resources) instead of built-in. This does not have much practical use unless one wants to build objects with them directly." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:273 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:273 msgid "This option is provided to help those who prefer working directly with meshes instead of scenes." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:277 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:277 msgid "Light Baking" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:279 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:279 msgid "Whether or not the mesh is used in baked lightmaps." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:281 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:281 msgid "**Disabled:** The mesh is not used in baked lightmaps." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:282 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:282 msgid "**Enable:** The mesh is used in baked lightmaps." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:283 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:283 msgid "**Gen Lightmaps:** The mesh is used in baked lightmaps, and unwraps a second UV layer for lightmaps." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:285 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:285 msgid "For more information on light baking see :ref:`doc_baked_lightmaps`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:288 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:288 msgid "External Files" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:290 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:290 msgid "Generated meshes and materials can be optionally stored in a subdirectory with the name of the scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:294 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:294 msgid "Animation options" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:296 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:296 msgid "Godot provides many options regarding how animation data is dealt with. Some exporters (such as Blender) can generate many animations in a single file. Others, such as 3DS Max or Maya, need many animations put into the same timeline or, at worst, put each animation in a separate file." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:303 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:303 msgid "Import of animations is enabled by default." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:307 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:307 msgid "To modify animations from an imported 3D scene, you need to change the animation storage option from **Built-In** to **Files** in the Import dock. Otherwise, changes made to animations from Godot will be lost when the project is run." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:312 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:312 msgid "FPS" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:314 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:314 msgid "Most 3D export formats store animation timeline in seconds instead of frames. To ensure animations are imported as faithfully as possible, please specify the frames per second used to edit them. Failing to do this may result in shaky animations." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:319 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:319 msgid "Filter Script" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:321 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:321 msgid "It is possible to specify a filter script in a special syntax to decide which tracks from which animations should be kept." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:324 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:324 msgid "The filter script is executed against each imported animation. The syntax consists of two types of statements, the first for choosing which animations to filter, and the second for filtering individual tracks within the matched animation. All name patterns are performed using a case insensitive expression match, using ``?`` and ``*`` wildcards (using ``String.matchn()`` under the hood)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:330 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:330 msgid "The script must start with an animation filter statement (as denoted by the line beginning with an ``@``). For example, if we would like to apply filters to all imported animations which have a name ending in ``\"_Loop\"``::" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:336 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:336 msgid "Similarly, additional patterns can be added to the same line, separated by commas. Here is a modified example to additionally *include* all animations with names that begin with ``\"Arm_Left\"``, but also *exclude* all animations which have names ending in ``\"Attack\"``::" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:342 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:342 msgid "Following the animation selection filter statement, we add track filtering patterns to indicate which animation tracks should be kept or discarded. If no track filter patterns are specified, then all tracks within the matched animations will be discarded!" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:346 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:346 msgid "It's important to note that track filter statements are applied in order for each track within the animation, this means that one line may include a track, a later rule can still discard it. Similarly, a track excluded by an early rule may then be re-included once again by a filter rule further down in the filter script." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:351 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:351 msgid "For example: include all tracks in animations with names ending in ``\"_Loop\"``, but discard any tracks affecting a ``\"Skeleton\"`` which end in ``\"Control\"``, unless they have ``\"Arm\"`` in their name::" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:360 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:360 msgid "In the above example, tracks like ``\"Skeleton:Leg_Control\"`` would be discarded, while tracks such as ``\"Skeleton:Head\"`` or ``\"Skeleton:Arm_Left_Control\"`` would be retained." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:363 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:363 msgid "Any track filter lines that do not begin with a ``+`` or ``-`` are ignored." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:368 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:368 msgid "By default, animations are saved as built-in. It is possible to save them to a file instead. This allows adding custom tracks to the animations and keeping them after a reimport." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:372 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:372 msgid "Optimizer" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:374 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:374 msgid "When animations are imported, an optimizer is run, which reduces the size of the animation considerably. In general, this should always be turned on unless you suspect that an animation might be broken due to it being enabled." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:378 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:378 msgid "Clips" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:380 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:380 msgid "It is possible to specify multiple animations from a single timeline as clips. For this to work, the model must have only one animation that is named ``default``. To create clips, change the clip amount to something greater than zero. You can then name a clip, specify which frames it starts and stops on, and choose whether the animation loops or not." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:389 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:389 msgid "Scene inheritance" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:391 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:391 msgid "In many cases, it may be desired to make modifications to the imported scene. By default, this is not possible because if the source asset changes (source ``.dae``, ``.gltf``, ``.obj`` file re-exported from 3D modelling app), Godot will re-import the whole scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:394 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:394 msgid "It is possible, however, to make local modifications by using *Scene Inheritance*. Try to open the imported scene and the following dialog will appear:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:399 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:399 msgid "In inherited scenes, the only limitations for modifications are:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:401 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:401 msgid "Nodes can't be removed (but can be added anywhere)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:402 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:402 msgid "Sub-Resources can't be edited (save them externally as described above for this)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:404 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:404 msgid "Other than that, everything is allowed!" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:409 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:409 msgid "Import hints" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:411 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:411 msgid "Many times, when editing a scene, there are common tasks that need to be done after exporting:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:413 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:413 msgid "Adding collision detection to objects." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:414 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:414 msgid "Setting objects as navigation meshes." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:415 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:415 msgid "Deleting nodes that are not used in the game engine (like specific lights used for modelling)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:417 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:417 msgid "To simplify this workflow, Godot offers several suffixes that can be added to the names of the objects in your 3D modelling software. When imported, Godot will detect suffixes in object names and will perform actions automatically." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:423 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:423 msgid "All the suffixes described below are *case-sensitive*." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:426 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:426 msgid "Remove nodes (-noimp)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:428 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:428 msgid "Objects that have the ``-noimp`` suffix will be removed at import-time no matter what their type is. They will not appear in the imported scene." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:432 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:432 msgid "Create collisions (-col, -convcol, -colonly, -convcolonly)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:434 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:434 msgid "The option ``-col`` will work only for Mesh objects. If it is detected, a child static collision node will be added, using the same geometry as the mesh. This will create a triangle mesh collision shape, which is a slow, but accurate option for collision detection. This option is usually what you want for level geometry (but see also ``-colonly`` below)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:440 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:440 msgid "The option ``-convcol`` will create a :ref:`class_convexpolygonshape` instead of a :ref:`class_concavepolygonshape`. Unlike triangle meshes which can be concave, a convex shape can only accurately represent a shape that doesn't have any concave angles (a pyramid is convex, but a hollow box is concave). Due to this, convex collision shapes are generally not suited for level geometry. When representing simple enough meshes, convex collision shapes can result in better performance compared to a triangle collision shape. This option is ideal for simple or dynamic objects that require mostly-accurate collision detection." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:449 -msgid "However, in both cases, the visual geometry may be too complex or not smooth enough for collisions. This can create physics glitches and slow down the engine unneccesarily." +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:449 +msgid "However, in both cases, the visual geometry may be too complex or not smooth enough for collisions. This can create physics glitches and slow down the engine unnecessarily." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:453 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:453 msgid "To solve this, the ``-colonly`` modifier exists. It will remove the mesh upon importing and will create a :ref:`class_staticbody` collision instead. This helps the visual mesh and actual collision to be separated." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:457 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:457 msgid "The option ``-convcolonly`` works in a similar way, but will create a :ref:`class_convexpolygonshape` instead." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:459 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:459 msgid "The option ``-colonly`` can also be used with Blender's empty objects. On import, it will create a :ref:`class_staticbody` with a collision node as a child. The collision node will have one of a number of predefined shapes, depending on Blender's empty draw type:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:466 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:466 msgid "Single arrow will create a :ref:`class_rayshape`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:467 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:467 msgid "Cube will create a :ref:`class_boxshape`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:468 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:468 msgid "Image will create a :ref:`class_planeshape`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:469 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:469 msgid "Sphere (and the others not listed) will create a :ref:`class_sphereshape`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:471 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:471 msgid "When possible, **try to use a few primitive collision shapes** instead of triangle mesh or convex shapes. Primitive shapes often have the best performance and reliability." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:477 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:477 msgid "For better visibility in Blender's editor, you can set the \"X-Ray\" option on collision empties and set some distinct color for them in Blender's **User Preferences > Themes > 3D View > Empty**." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:483 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:483 msgid "See :ref:`doc_collision_shapes_3d` for a comprehensive overview of collision shapes." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:487 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:487 msgid "Create navigation (-navmesh)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:489 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:489 msgid "A mesh node with the ``-navmesh`` suffix will be converted to a navigation mesh. The original Mesh object will be removed at import-time." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:493 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:493 msgid "Create a VehicleBody (-vehicle)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:495 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:495 msgid "A mesh node with the ``-vehicle`` suffix will be imported as a child to a :ref:`class_VehicleBody` node." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:499 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:499 msgid "Create a VehicleWheel (-wheel)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:501 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:501 msgid "A mesh node with the ``-wheel`` suffix will be imported as a child to a :ref:`class_VehicleWheel` node." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:505 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:505 msgid "Rigid Body (-rigid)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:507 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:507 msgid "A mesh node with the ``-rigid`` suffix will be imported as a :ref:`class_RigidBody`." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:510 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:510 msgid "Animation loop (-loop, -cycle)" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:512 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:512 msgid "Animation clips in the COLLADA document that start or end with the token ``loop`` or ``cycle`` will be imported as a Godot Animation with the loop flag set. **Unlike the other suffixes described above, this does not require a hyphen.**" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_scenes.rst:516 +#: ../../docs/tutorials/assets_pipeline/importing_scenes.rst:516 msgid "In Blender, this requires using the NLA Editor and naming the Action with the ``loop`` or ``cycle`` prefix or suffix." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/assets/importing_translations.pot b/sphinx/templates/tutorials/assets_pipeline/importing_translations.pot similarity index 57% rename from sphinx/templates/getting_started/workflow/assets/importing_translations.pot rename to sphinx/templates/tutorials/assets_pipeline/importing_translations.pot index 9076cfe496..a687d9b593 100644 --- a/sphinx/templates/getting_started/workflow/assets/importing_translations.pot +++ b/sphinx/templates/tutorials/assets_pipeline/importing_translations.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,195 +16,195 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:4 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:4 msgid "Importing translations" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:7 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:7 msgid "Games and internationalization" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:9 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:9 msgid "The world is full of different languages and cultures, so nowadays games are released in several languages. To handle this, internationalized text must be supported in any modern game engine." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:13 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:13 msgid "In regular desktop or mobile applications, internationalized text is usually located in resource files (or .po files for GNU stuff). Games, however, can use several orders of magnitude more text than applications, so they must support efficient methods for dealing with loads of multilingual text." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:19 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:19 msgid "There are two approaches to generate multilingual language games and applications. Both are based on a key:value system. The first is to use one of the languages as the key (usually English), the second is to use a specific identifier. The first approach is probably easier for development if a game is released first in English, later in other languages, but a complete nightmare if working with many languages at the same time." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:27 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:27 msgid "In general, games use the second approach and a unique ID is used for each string. This allows you to revise the text while it is being translated to other languages. The unique ID can be a number, a string, or a string with a number (it's just a unique string anyway)." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:32 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:32 msgid "If you need a more powerful file format, Godot also supports loading translations written in the gettext ``.po`` format. See :ref:`doc_localization_using_gettext` for details." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:37 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:37 msgid "Translation format" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:39 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:39 msgid "To complete the picture and allow efficient support for translations, Godot has a special importer that can read CSV files. Most spreadsheet editors can export to this format, so the only requirement is that the files have a special arrangement. The CSV files **must** be saved with UTF-8 encoding without a `byte order mark `__." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:47 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:47 msgid "By default, Microsoft Excel will always save CSV files with ANSI encoding rather than UTF-8. There is no built-in way to do this, but there are workarounds as described `here `__." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:52 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:52 msgid "We recommend using `LibreOffice `__ or Google Sheets instead." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:54 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:54 msgid "CSV files must be formatted as follows:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:57 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:76 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:57 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:76 msgid "keys" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:57 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:57 msgid "" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:57 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:57 msgid "" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:57 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:57 msgid "" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:59 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:59 msgid "KEY1" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:59 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:59 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:59 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:59 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:59 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:59 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:61 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:61 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:61 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:63 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:63 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:63 msgid "string" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:61 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:61 msgid "KEY2" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:63 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:63 msgid "KEYN" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:66 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:66 msgid "The \"lang\" tags must represent a language, which must be one of the :ref:`valid locales ` supported by the engine. The \"KEY\" tags must be unique and represent a string universally (they are usually in uppercase, to differentiate from other strings). These keys will be replaced at runtime by the matching translated string. Note that the case is important, \"KEY1\" and \"Key1\" will be different keys. The top-left cell is ignored and can be left empty or having any content. Here's an example:" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:76 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:76 msgid "en" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:76 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:76 msgid "es" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:76 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:76 msgid "ja" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:78 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:78 msgid "GREET" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:78 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:78 msgid "Hello, friend!" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:78 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:78 msgid "Hola, amigo!" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:78 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:78 msgid "こんにちは" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:80 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:80 msgid "ASK" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:80 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:80 msgid "How are you?" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:80 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:80 msgid "Cómo está?" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:80 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:80 msgid "元気ですか" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:82 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:82 msgid "BYE" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:82 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:82 msgid "Goodbye" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:82 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:82 msgid "Adiós" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:82 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:82 msgid "さようなら" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:84 msgid "QUOTE" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:84 msgid "\"Hello\" said the man." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:84 msgid "\"Hola\" dijo el hombre." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:84 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:84 msgid "「こんにちは」男は言いました" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:87 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:87 msgid "The same example is shown below as a comma-separated plain text file, which should be the result of editing the above in a spreadsheet. When editing the plain text version, be sure to enclose with double quotes any message that contains commas, line breaks or double quotes, so that commas are not parsed as delimiters, line breaks don't create new entries and double quotes are not parsed as enclosing characters. Be sure to escape any double quotes a message may contain by preceding them with another double quote. Alternatively, you can select another delimiter than comma in the import options." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:106 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:106 msgid "CSV importer" msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:108 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:108 msgid "Godot will treat CSV files as translations by default. It will import them and generate one or more compressed translation resource files next to it." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:111 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:111 msgid "Importing will also add the translation to the list of translations to load when the game runs, specified in project.godot (or the project settings). Godot allows loading and removing translations at runtime as well." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:116 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:116 msgid "Select the ``.csv`` file and access the **Import** dock to define import options. You can toggle the compression of the imported translations, and select the delimiter to use when parsing the CSV file." msgstr "" -#: ../../docs/getting_started/workflow/assets/importing_translations.rst:122 +#: ../../docs/tutorials/assets_pipeline/importing_translations.rst:122 msgid "Be sure to click **Reimport** after any change to these options." msgstr "" diff --git a/sphinx/templates/getting_started/scripting/index.pot b/sphinx/templates/tutorials/assets_pipeline/index.pot similarity index 82% rename from sphinx/templates/getting_started/scripting/index.pot rename to sphinx/templates/tutorials/assets_pipeline/index.pot index 955de668e7..e0871d0bf5 100644 --- a/sphinx/templates/getting_started/scripting/index.pot +++ b/sphinx/templates/tutorials/assets_pipeline/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/scripting/index.rst:2 -msgid "Scripting" +#: ../../docs/tutorials/assets_pipeline/index.rst:2 +msgid "Assets pipeline" msgstr "" diff --git a/sphinx/templates/tutorials/audio/audio_buses.pot b/sphinx/templates/tutorials/audio/audio_buses.pot index 63f61e40f0..cd2af6714a 100644 --- a/sphinx/templates/tutorials/audio/audio_buses.pot +++ b/sphinx/templates/tutorials/audio/audio_buses.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/audio/audio_streams.pot b/sphinx/templates/tutorials/audio/audio_streams.pot index 1ea731a959..080149d74f 100644 --- a/sphinx/templates/tutorials/audio/audio_streams.pot +++ b/sphinx/templates/tutorials/audio/audio_streams.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/audio/index.pot b/sphinx/templates/tutorials/audio/index.pot index f0b8cbf2a0..6697bc01d4 100644 --- a/sphinx/templates/tutorials/audio/index.pot +++ b/sphinx/templates/tutorials/audio/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/audio/recording_with_microphone.pot b/sphinx/templates/tutorials/audio/recording_with_microphone.pot index 5575ce8f75..8944ff5f9d 100644 --- a/sphinx/templates/tutorials/audio/recording_with_microphone.pot +++ b/sphinx/templates/tutorials/audio/recording_with_microphone.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/tutorials/audio/sync_with_audio.pot b/sphinx/templates/tutorials/audio/sync_with_audio.pot index 923142bb8d..cf48296b0a 100644 --- a/sphinx/templates/tutorials/audio/sync_with_audio.pot +++ b/sphinx/templates/tutorials/audio/sync_with_audio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/sphinx/templates/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.pot b/sphinx/templates/tutorials/best_practices/autoloads_versus_internal_nodes.pot similarity index 65% rename from sphinx/templates/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.pot rename to sphinx/templates/tutorials/best_practices/autoloads_versus_internal_nodes.pot index cef7f917e9..c30565fe21 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.pot +++ b/sphinx/templates/tutorials/best_practices/autoloads_versus_internal_nodes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,122 +16,122 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:4 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:4 msgid "Autoloads versus regular nodes" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:6 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:6 msgid "Godot offers a feature to automatically load nodes at the root of your project, allowing you to access them globally, that can fulfill the role of a Singleton: :ref:`doc_singletons_autoload`. These auto-loaded nodes are not freed when you change the scene from code with :ref:`SceneTree.change_scene `." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:11 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:11 msgid "In this guide, you will learn when to use the Autoload feature, and techniques you can use to avoid it." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:15 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:15 msgid "The cutting audio issue" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:17 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:17 msgid "Other engines can encourage the use of creating manager classes, singletons that organize a lot of functionality into a globally accessible object. Godot offers many ways to avoid global state thanks to the node tree and signals." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:21 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:21 msgid "For example, let's say we are building a platformer and want to collect coins that play a sound effect. There's a node for that: the :ref:`AudioStreamPlayer `. But if we call the ``AudioStreamPlayer`` while it is already playing a sound, the new sound interrupts the first." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:26 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:26 msgid "A solution is to code a global, auto-loaded sound manager class. It generates a pool of ``AudioStreamPlayer`` nodes that cycle through as each new request for sound effects comes in. Say we call that class ``Sound``, you can use it from anywhere in your project by calling ``Sound.play(\"coin_pickup.ogg\")``. This solves the problem in the short term but causes more problems:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:32 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:32 msgid "**Global state**: one object is now responsible for all objects' data. If the ``Sound`` class has errors or doesn't have an AudioStreamPlayer available, all the nodes calling it can break." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:36 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:36 msgid "**Global access**: now that any object can call ``Sound.play(sound_path)`` from anywhere, there's no longer an easy way to find the source of a bug." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:39 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:39 msgid "**Global resource allocation**: with a pool of ``AudioStreamPlayer`` nodes stored from the start, you can either have too few and face bugs, or too many and use more memory than you need." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:45 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:45 msgid "About global access, the problem is that Any code anywhere could pass wrong data to the ``Sound`` autoload in our example. As a result, the domain to explore to fix the bug spans the entire project." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:49 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:49 msgid "When you keep code inside a scene, only one or two scripts may be involved in audio." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:52 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:52 msgid "Contrast this with each scene keeping as many ``AudioStreamPlayer`` nodes as it needs within itself and all these problems go away:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:55 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:55 msgid "Each scene manages its own state information. If there is a problem with the data, it will only cause issues in that one scene." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:58 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:58 msgid "Each scene accesses only its own nodes. Now, if there is a bug, it's easy to find which node is at fault." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:61 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:61 msgid "Each scene allocates exactly the amount of resources it needs." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:64 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:64 msgid "Managing shared functionality or data" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:66 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:66 msgid "Another reason to use an Autoload can be that you want to reuse the same method or data across many scenes." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:69 -msgid "In the case of functions, you can create a new type of ``Node`` that provides that feature for an individual scene using the :ref:`class_name ` keyword in GDScript." +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:69 +msgid "In the case of functions, you can create a new type of ``Node`` that provides that feature for an individual scene using the :ref:`class_name ` keyword in GDScript." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:73 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:73 msgid "When it comes to data, you can either:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:75 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:75 msgid "Create a new type of :ref:`Resource ` to share the data." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:77 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:77 msgid "Store the data in an object to which each node has access, for example using the ``owner`` property to access the scene's root node." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:81 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:81 msgid "When you should use an Autoload" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:83 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:83 msgid "Auto-loaded nodes can simplify your code in some cases:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:85 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:85 msgid "**Static Data**: if you need data that is exclusive to one class, like a database, then an autoload can be a good tool. There is no scripting API in Godot to create and manage static data otherwise." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:89 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:89 msgid "**Static functions**: creating a library of functions that only return values." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:91 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:91 msgid "**Systems with a wide scope**: If the singleton is managing its own information and not invading the data of other objects, then it's a great way to create systems that handle broad-scoped tasks. For example, a quest or a dialogue system." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:96 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:96 msgid "Until Godot 3.1, another use was just for convenience: autoloads have a global variable for their name generated in GDScript, allowing you to call them from any script file in your project. But now, you can use the ``class_name`` keyword instead to get auto-completion for a type in your entire project." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:103 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:103 msgid "Autoload is not exactly a Singleton. Nothing prevents you from instantiating copies of an auto-loaded node. It is only a tool that makes a node load automatically as a child of the root of your scene tree, regardless of your game's node structure or which scene you run, e.g. by pressing :kbd:`F6` key." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/autoloads_versus_internal_nodes.rst:108 +#: ../../docs/tutorials/best_practices/autoloads_versus_internal_nodes.rst:108 msgid "As a result, you can get the auto-loaded node, for example an autoload called ``Sound``, by calling ``get_node(\"/root/Sound\")``." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/data_preferences.pot b/sphinx/templates/tutorials/best_practices/data_preferences.pot similarity index 70% rename from sphinx/templates/getting_started/workflow/best_practices/data_preferences.pot rename to sphinx/templates/tutorials/best_practices/data_preferences.pot index 13f1fa138b..2357ac8361 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/data_preferences.pot +++ b/sphinx/templates/tutorials/best_practices/data_preferences.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,346 +16,346 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:4 +#: ../../docs/tutorials/best_practices/data_preferences.rst:4 msgid "Data preferences" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:6 +#: ../../docs/tutorials/best_practices/data_preferences.rst:6 msgid "Ever wondered whether one should approach problem X with data structure Y or Z? This article covers a variety of topics related to these dilemmas." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:11 +#: ../../docs/tutorials/best_practices/data_preferences.rst:11 msgid "This article makes references to \"[something]-time\" operations. This terminology comes from algorithm analysis' `Big O Notation `_." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:15 +#: ../../docs/tutorials/best_practices/data_preferences.rst:15 msgid "Long-story short, it describes the worst-case scenario of runtime length. In laymen's terms:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:18 +#: ../../docs/tutorials/best_practices/data_preferences.rst:18 msgid "\"As the size of a problem domain increases, the runtime length of the algorithm...\"" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:21 +#: ../../docs/tutorials/best_practices/data_preferences.rst:21 msgid "Constant-time, ``O(1)``: \"...does not increase.\"" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:22 +#: ../../docs/tutorials/best_practices/data_preferences.rst:22 msgid "Logarithmic-time, ``O(log n)``: \"...increases at a slow rate.\"" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:23 +#: ../../docs/tutorials/best_practices/data_preferences.rst:23 msgid "Linear-time, ``O(n)``: \"...increases at the same rate.\"" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:24 +#: ../../docs/tutorials/best_practices/data_preferences.rst:24 msgid "Etc." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:26 +#: ../../docs/tutorials/best_practices/data_preferences.rst:26 msgid "Imagine if one had to process 3 million data points within a single frame. It would be impossible to craft the feature with a linear-time algorithm since the sheer size of the data would increase the runtime far beyond the time allotted. In comparison, using a constant-time algorithm could handle the operation without issue." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:32 +#: ../../docs/tutorials/best_practices/data_preferences.rst:32 msgid "By and large, developers want to avoid engaging in linear-time operations as much as possible. But, if one keeps the scale of a linear-time operation small, and if one does not need to perform the operation often, then it may be acceptable. Balancing these requirements and choosing the right algorithm / data structure for the job is part of what makes programmers' skills valuable." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:40 +#: ../../docs/tutorials/best_practices/data_preferences.rst:40 msgid "Array vs. Dictionary vs. Object" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:42 +#: ../../docs/tutorials/best_practices/data_preferences.rst:42 msgid "Godot stores all variables in the scripting API in the `Variant `_ class. Variants can store Variant-compatible data structures such as :ref:`Array ` and :ref:`Dictionary ` as well as :ref:`Object ` s." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:48 +#: ../../docs/tutorials/best_practices/data_preferences.rst:48 msgid "Godot implements Array as a ``Vector``. The engine stores the Array contents in a contiguous section of memory, i.e. they are in a row adjacent to each other." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:53 +#: ../../docs/tutorials/best_practices/data_preferences.rst:53 msgid "For those unfamiliar with C++, a Vector is the name of the array object in traditional C++ libraries. It is a \"templated\" type, meaning that its records can only contain a particular type (denoted by angled brackets). So, for example, a :ref:`PoolStringArray ` would be something like a ``Vector``." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:60 +#: ../../docs/tutorials/best_practices/data_preferences.rst:60 msgid "Contiguous memory stores imply the following operation performance:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:62 +#: ../../docs/tutorials/best_practices/data_preferences.rst:62 msgid "**Iterate:** Fastest. Great for loops." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:64 +#: ../../docs/tutorials/best_practices/data_preferences.rst:64 msgid "Op: All it does is increment a counter to get to the next record." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:66 +#: ../../docs/tutorials/best_practices/data_preferences.rst:66 msgid "**Insert, Erase, Move:** Position-dependent. Generally slow." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:68 +#: ../../docs/tutorials/best_practices/data_preferences.rst:68 msgid "Op: Adding/removing/moving content involves moving the adjacent records over (to make room / fill space)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:71 +#: ../../docs/tutorials/best_practices/data_preferences.rst:71 msgid "Fast add/remove *from the end*." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:73 +#: ../../docs/tutorials/best_practices/data_preferences.rst:73 msgid "Slow add/remove *from an arbitrary position*." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:75 +#: ../../docs/tutorials/best_practices/data_preferences.rst:75 msgid "Slowest add/remove *from the front*." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:77 +#: ../../docs/tutorials/best_practices/data_preferences.rst:77 msgid "If doing many inserts/removals *from the front*, then..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:79 +#: ../../docs/tutorials/best_practices/data_preferences.rst:79 msgid "invert the array." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:81 +#: ../../docs/tutorials/best_practices/data_preferences.rst:81 msgid "do a loop which executes the Array changes *at the end*." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:83 +#: ../../docs/tutorials/best_practices/data_preferences.rst:83 msgid "re-invert the array." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:85 +#: ../../docs/tutorials/best_practices/data_preferences.rst:85 msgid "This makes only 2 copies of the array (still constant time, but slow) versus copying roughly 1/2 of the array, on average, N times (linear time)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:88 +#: ../../docs/tutorials/best_practices/data_preferences.rst:88 msgid "**Get, Set:** Fastest *by position*. E.g. can request 0th, 2nd, 10th record, etc. but cannot specify which record you want." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:91 +#: ../../docs/tutorials/best_practices/data_preferences.rst:91 msgid "Op: 1 addition operation from array start position up to desired index." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:93 +#: ../../docs/tutorials/best_practices/data_preferences.rst:93 msgid "**Find:** Slowest. Identifies the index/position of a value." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:95 +#: ../../docs/tutorials/best_practices/data_preferences.rst:95 msgid "Op: Must iterate through array and compare values until one finds a match." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:97 +#: ../../docs/tutorials/best_practices/data_preferences.rst:97 msgid "Performance is also dependent on whether one needs an exhaustive search." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:100 +#: ../../docs/tutorials/best_practices/data_preferences.rst:100 msgid "If kept ordered, custom search operations can bring it to logarithmic time (relatively fast). Laymen users won't be comfortable with this though. Done by re-sorting the Array after every edit and writing an ordered-aware search algorithm." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:105 +#: ../../docs/tutorials/best_practices/data_preferences.rst:105 msgid "Godot implements Dictionary as an ``OrderedHashMap``. The engine stores a small array (initialized to 2^3 or 8 records) of key-value pairs. When one attempts to access a value, they provide it a key. It then *hashes* the key, i.e. converts it into a number. The \"hash\" is used to calculate the index into the array. As an array, the OHM then has a quick lookup within the \"table\" of keys mapped to values. When the HashMap becomes too full, it increases to the next power of 2 (so, 16 records, then 32, etc.) and rebuilds the structure." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:113 +#: ../../docs/tutorials/best_practices/data_preferences.rst:113 msgid "Hashes are to reduce the chance of a key collision. If one occurs, the table must recalculate another index for the value that takes the previous position into account. In all, this results in constant-time access to all records at the expense of memory and some minor operational efficiency." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:118 +#: ../../docs/tutorials/best_practices/data_preferences.rst:118 msgid "Hashing every key an arbitrary number of times." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:120 +#: ../../docs/tutorials/best_practices/data_preferences.rst:120 msgid "Hash operations are constant-time, so even if an algorithm must do more than one, as long as the number of hash calculations doesn't become too dependent on the density of the table, things will stay fast. Which leads to..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:125 +#: ../../docs/tutorials/best_practices/data_preferences.rst:125 msgid "Maintaining an ever-growing size for the table." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:127 +#: ../../docs/tutorials/best_practices/data_preferences.rst:127 msgid "HashMaps maintain gaps of unused memory interspersed in the table on purpose to reduce hash collisions and maintain the speed of accesses. This is why it constantly increases in size quadratically by powers of 2." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:132 +#: ../../docs/tutorials/best_practices/data_preferences.rst:132 msgid "As one might be able to tell, Dictionaries specialize in tasks that Arrays do not. An overview of their operational details is as follows:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:135 +#: ../../docs/tutorials/best_practices/data_preferences.rst:135 msgid "**Iterate:** Fast." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:137 +#: ../../docs/tutorials/best_practices/data_preferences.rst:137 msgid "Op: Iterate over the map's internal vector of hashes. Return each key. Afterwards, users then use the key to jump to and return the desired value." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:141 +#: ../../docs/tutorials/best_practices/data_preferences.rst:141 msgid "**Insert, Erase, Move:** Fastest." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:143 +#: ../../docs/tutorials/best_practices/data_preferences.rst:143 msgid "Op: Hash the given key. Do 1 addition operation to look up the appropriate value (array start + offset). Move is two of these (one insert, one erase). The map must do some maintenance to preserve its capabilities:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:148 +#: ../../docs/tutorials/best_practices/data_preferences.rst:148 msgid "update ordered List of records." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:150 +#: ../../docs/tutorials/best_practices/data_preferences.rst:150 msgid "determine if table density mandates a need to expand table capacity." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:152 +#: ../../docs/tutorials/best_practices/data_preferences.rst:152 msgid "The Dictionary remembers in what order users inserted its keys. This enables it to execute reliable iterations." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:155 +#: ../../docs/tutorials/best_practices/data_preferences.rst:155 msgid "**Get, Set:** Fastest. Same as a lookup *by key*." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:157 +#: ../../docs/tutorials/best_practices/data_preferences.rst:157 msgid "Op: Same as insert/erase/move." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:159 +#: ../../docs/tutorials/best_practices/data_preferences.rst:159 msgid "**Find:** Slowest. Identifies the key of a value." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:161 +#: ../../docs/tutorials/best_practices/data_preferences.rst:161 msgid "Op: Must iterate through records and compare the value until a match is found." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:164 +#: ../../docs/tutorials/best_practices/data_preferences.rst:164 msgid "Note that Godot does not provide this feature out-of-the-box (because they aren't meant for this task)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:167 +#: ../../docs/tutorials/best_practices/data_preferences.rst:167 msgid "Godot implements Objects as stupid, but dynamic containers of data content. Objects query data sources when posed questions. For example, to answer the question, \"do you have a property called, 'position'?\", it might ask its :ref:`script ` or the :ref:`ClassDB `. One can find more information about what objects are and how they work in the :ref:`doc_what_are_godot_classes` article." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:174 +#: ../../docs/tutorials/best_practices/data_preferences.rst:174 msgid "The important detail here is the complexity of the Object's task. Every time it performs one of these multi-source queries, it runs through *several* iteration loops and HashMap lookups. What's more, the queries are linear-time operations dependent on the Object's inheritance hierarchy size. If the class the Object queries (its current class) doesn't find anything, the request defers to the next base class, all the way up until the original Object class. While these are each fast operations in isolation, the fact that it must make so many checks is what makes them slower than both of the alternatives for looking up data." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:186 +#: ../../docs/tutorials/best_practices/data_preferences.rst:186 msgid "When developers mention how slow the scripting API is, it is this chain of queries they refer to. Compared to compiled C++ code where the application knows exactly where to go to find anything, it is inevitable that scripting API operations will take much longer. They must locate the source of any relevant data before they can attempt to access it." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:192 +#: ../../docs/tutorials/best_practices/data_preferences.rst:192 msgid "The reason GDScript is slow is because every operation it performs passes through this system." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:195 +#: ../../docs/tutorials/best_practices/data_preferences.rst:195 msgid "C# can process some content at higher speeds via more optimized bytecode. But, if the C# script calls into an engine class' content or if the script tries to access something external to it, it will go through this pipeline." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:200 +#: ../../docs/tutorials/best_practices/data_preferences.rst:200 msgid "NativeScript C++ goes even further and keeps everything internal by default. Calls into external structures will go through the scripting API. In NativeScript C++, registering methods to expose them to the scripting API is a manual task. It is at this point that external, non-C++ classes will use the API to locate them." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:206 +#: ../../docs/tutorials/best_practices/data_preferences.rst:206 msgid "So, assuming one extends from Reference to create a data structure, like an Array or Dictionary, why choose an Object over the other two options?" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:209 +#: ../../docs/tutorials/best_practices/data_preferences.rst:209 msgid "**Control:** With objects comes the ability to create more sophisticated structures. One can layer abstractions over the data to ensure the external API doesn't change in response to internal data structure changes. What's more, Objects can have signals, allowing for reactive behavior." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:214 +#: ../../docs/tutorials/best_practices/data_preferences.rst:214 msgid "**Clarity:** Objects are a reliable data source when it comes to the data that scripts and engine classes define for them. Properties may not hold the values one expects, but one doesn't need to worry about whether the property exists in the first place." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:219 +#: ../../docs/tutorials/best_practices/data_preferences.rst:219 msgid "**Convenience:** If one already has a similar data structure in mind, then extending from an existing class makes the task of building the data structure much easier. In comparison, Arrays and Dictionaries don't fulfill all use cases one might have." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:224 +#: ../../docs/tutorials/best_practices/data_preferences.rst:224 msgid "Objects also give users the opportunity to create even more specialized data structures. With it, one can design their own List, Binary Search Tree, Heap, Splay Tree, Graph, Disjoint Set, and any host of other options." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:228 +#: ../../docs/tutorials/best_practices/data_preferences.rst:228 msgid "\"Why not use Node for tree structures?\" one might ask. Well, the Node class contains things that won't be relevant to one's custom data structure. As such, it can be helpful to construct one's own node type when building tree structures." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:276 +#: ../../docs/tutorials/best_practices/data_preferences.rst:276 msgid "From here, one can then create their own structures with specific features, limited only by their imagination." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:280 +#: ../../docs/tutorials/best_practices/data_preferences.rst:280 msgid "Enumerations: int vs. string" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:282 +#: ../../docs/tutorials/best_practices/data_preferences.rst:282 msgid "Most languages offer an enumeration type option. GDScript is no different, but unlike most other languages, it allows one to use either integers or strings for the enum values (the latter only when using the ``export`` keyword in GDScript). The question then arises, \"which should one use?\"" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:287 +#: ../../docs/tutorials/best_practices/data_preferences.rst:287 msgid "The short answer is, \"whichever you are more comfortable with.\" This is a feature specific to GDScript and not Godot scripting in general; The languages prioritizes usability over performance." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:291 +#: ../../docs/tutorials/best_practices/data_preferences.rst:291 msgid "On a technical level, integer comparisons (constant-time) will happen faster than string comparisons (linear-time). If one wants to keep up other languages' conventions though, then one should use integers." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:295 +#: ../../docs/tutorials/best_practices/data_preferences.rst:295 msgid "The primary issue with using integers comes up when one wants to *print* an enum value. As integers, attempting to print MY_ENUM will print ``5`` or what-have-you, rather than something like ``\"MyEnum\"``. To print an integer enum, one would have to write a Dictionary that maps the corresponding string value for each enum." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:301 +#: ../../docs/tutorials/best_practices/data_preferences.rst:301 msgid "If the primary purpose of using an enum is for printing values and one wishes to group them together as related concepts, then it makes sense to use them as strings. That way, a separate data structure to execute on the printing is unnecessary." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:307 +#: ../../docs/tutorials/best_practices/data_preferences.rst:307 msgid "AnimatedTexture vs. AnimatedSprite vs. AnimationPlayer vs. AnimationTree" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:309 +#: ../../docs/tutorials/best_practices/data_preferences.rst:309 msgid "Under what circumstances should one use each of Godot's animation classes? The answer may not be immediately clear to new Godot users." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:312 +#: ../../docs/tutorials/best_practices/data_preferences.rst:312 msgid ":ref:`AnimatedTexture ` is a texture that the engine draws as an animated loop rather than a static image. Users can manipulate..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:316 +#: ../../docs/tutorials/best_practices/data_preferences.rst:316 msgid "the rate at which it moves across each section of the texture (fps)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:318 +#: ../../docs/tutorials/best_practices/data_preferences.rst:318 msgid "the number of regions contained within the texture (frames)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:320 +#: ../../docs/tutorials/best_practices/data_preferences.rst:320 msgid "Godot's :ref:`VisualServer ` then draws the regions in sequence at the prescribed rate. The good news is that this involves no extra logic on the part of the engine. The bad news is that users have very little control." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:325 +#: ../../docs/tutorials/best_practices/data_preferences.rst:325 msgid "Also note that AnimatedTexture is a :ref:`Resource ` unlike the other :ref:`Node ` objects discussed here. One might create a :ref:`Sprite ` node that uses AnimatedTexture as its texture. Or (something the others can't do) one could add AnimatedTextures as tiles in a :ref:`TileSet ` and integrate it with a :ref:`TileMap ` for many auto-animating backgrounds that all render in a single batched draw call." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:333 +#: ../../docs/tutorials/best_practices/data_preferences.rst:333 msgid "The AnimatedSprite node, in combination with the :ref:`SpriteFrames ` resource, allows one to create a variety of animation sequences through spritesheets, flip between animations, and control their speed, regional offset, and orientation. This makes them well-suited to controlling 2D frame-based animations." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:339 +#: ../../docs/tutorials/best_practices/data_preferences.rst:339 msgid "If one needs trigger other effects in relation to animation changes (for example, create particle effects, call functions, or manipulate other peripheral elements besides the frame-based animation), then will need to use an :ref:`AnimationPlayer ` node in conjunction with the AnimatedSprite." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:345 +#: ../../docs/tutorials/best_practices/data_preferences.rst:345 msgid "AnimationPlayers are also the tool one will need to use if they wish to design more complex 2D animation systems, such as..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:348 +#: ../../docs/tutorials/best_practices/data_preferences.rst:348 msgid "**Cut-Out animations:** editing sprites' transforms at runtime." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:350 +#: ../../docs/tutorials/best_practices/data_preferences.rst:350 msgid "**2D Mesh animations:** defining a region for the sprite's texture and rigging a skeleton to it. Then one animates the bones which stretch and bend the texture in proportion to the bones' relationships to each other." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:355 +#: ../../docs/tutorials/best_practices/data_preferences.rst:355 msgid "A mix of the above." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/data_preferences.rst:357 +#: ../../docs/tutorials/best_practices/data_preferences.rst:357 msgid "While one needs an AnimationPlayer to design each of the individual animation sequences for a game, it can also be useful to combine animations for blending, i.e. enabling smooth transitions between these animations. There may also be a hierarchical structure between animations that one plans out for their object. These are the cases where the :ref:`AnimationTree ` shines. One can find an in-depth guide on using the AnimationTree :ref:`here `." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/godot_interfaces.pot b/sphinx/templates/tutorials/best_practices/godot_interfaces.pot similarity index 69% rename from sphinx/templates/getting_started/workflow/best_practices/godot_interfaces.pot rename to sphinx/templates/tutorials/best_practices/godot_interfaces.pot index 80d7d3a501..57c9d3519a 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/godot_interfaces.pot +++ b/sphinx/templates/tutorials/best_practices/godot_interfaces.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,114 +16,114 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:4 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:4 msgid "Godot interfaces" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:6 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:6 msgid "Often one needs scripts that rely on other objects for features. There are 2 parts to this process:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:9 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:9 msgid "Acquiring a reference to the object that presumably has the features." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:11 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:11 msgid "Accessing the data or logic from the object." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:13 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:13 msgid "The rest of this tutorial outlines the various ways of doing all this." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:16 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:16 msgid "Acquiring object references" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:18 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:18 msgid "For all :ref:`Object `\\s, the most basic way of referencing them is to get a reference to an existing object from another acquired instance." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:32 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:32 msgid "The same principle applies for :ref:`Reference ` objects. While users often access :ref:`Node ` and :ref:`Resource ` this way, alternative measures are available." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:36 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:36 msgid "Instead of property or method access, one can get Resources by load access." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:115 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:115 msgid "Note the following:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:117 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:117 msgid "There are many ways in which a language can load such resources." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:119 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:119 msgid "When designing how objects will access data, don't forget that one can pass resources around as references as well." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:122 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:122 msgid "Keep in mind that loading a resource fetches the cached resource instance maintained by the engine. To get a new object, one must :ref:`duplicate ` an existing reference or instantiate one from scratch with ``new()``." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:127 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:127 msgid "Nodes likewise have an alternative access point: the SceneTree." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:245 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:245 msgid "Accessing data or logic from an object" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:247 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:247 msgid "Godot's scripting API is duck-typed. This means that if a script executes an operation, Godot doesn't validate that it supports the operation by **type**. It instead checks that the object **implements** the individual method." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:251 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:251 msgid "For example, the :ref:`CanvasItem ` class has a ``visible`` property. All properties exposed to the scripting API are in fact a setter and getter pair bound to a name. If one tried to access :ref:`CanvasItem.visible `, then Godot would do the following checks, in order:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:257 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:257 msgid "If the object has a script attached, it will attempt to set the property through the script. This leaves open the opportunity for scripts to override a property defined on a base object by overriding the setter method for the property." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:262 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:262 msgid "If the script does not have the property, it performs a HashMap lookup in the ClassDB for the \"visible\" property against the CanvasItem class and all of its inherited types. If found, it will call the bound setter or getter. For more information about HashMaps, see the :ref:`data preferences ` docs." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:268 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:268 msgid "If not found, it does an explicit check to see if the user wants to access the \"script\" or \"meta\" properties." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:271 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:271 msgid "If not, it checks for a ``_set``/``_get`` implementation (depending on type of access) in the CanvasItem and its inherited types. These methods can execute logic that gives the impression that the Object has a property. This is also the case with the ``_get_property_list`` method." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:276 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:276 msgid "Note that this happens even for non-legal symbol names such as in the case of :ref:`TileSet `'s \"1/tile_name\" property. This refers to the name of the tile with ID 1, i.e. :ref:`TileSet.tile_get_name(1) `." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:281 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:281 msgid "As a result, this duck-typed system can locate a property either in the script, the object's class, or any class that object inherits, but only for things which extend Object." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:285 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:285 msgid "Godot provides a variety of options for performing runtime checks on these accesses:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:288 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:288 msgid "A duck-typed property access. These will property check (as described above). If the operation isn't supported by the object, execution will halt." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:316 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:316 msgid "A method check. In the case of :ref:`CanvasItem.visible `, one can access the methods, ``set_visible`` and ``is_visible`` like any other method." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:454 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:454 msgid "Outsource the access to a :ref:`FuncRef `. These may be useful in cases where one needs the max level of freedom from dependencies. In this case, one relies on an external context to setup the method." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_interfaces.rst:513 +#: ../../docs/tutorials/best_practices/godot_interfaces.rst:513 msgid "These strategies contribute to Godot's flexible design. Between them, users have a breadth of tools to meet their specific needs." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/godot_notifications.pot b/sphinx/templates/tutorials/best_practices/godot_notifications.pot similarity index 70% rename from sphinx/templates/getting_started/workflow/best_practices/godot_notifications.pot rename to sphinx/templates/tutorials/best_practices/godot_notifications.pot index 91e46dca5a..3b21114e6e 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/godot_notifications.pot +++ b/sphinx/templates/tutorials/best_practices/godot_notifications.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,150 +16,150 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:4 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:4 msgid "Godot notifications" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:6 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:6 msgid "Every Object in Godot implements a :ref:`_notification ` method. Its purpose is to allow the Object to respond to a variety of engine-level callbacks that may relate to it. For example, if the engine tells a :ref:`CanvasItem ` to \"draw\", it will call ``_notification(NOTIFICATION_DRAW)``." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:13 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:13 msgid "Some of these notifications, like draw, are useful to override in scripts. So much so that Godot exposes many of them with dedicated functions:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:16 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:16 msgid "``_ready()`` : NOTIFICATION_READY" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:18 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:18 msgid "``_enter_tree()`` : NOTIFICATION_ENTER_TREE" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:20 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:20 msgid "``_exit_tree()`` : NOTIFICATION_EXIT_TREE" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:22 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:22 msgid "``_process(delta)`` : NOTIFICATION_PROCESS" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:24 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:24 msgid "``_physics_process(delta)`` : NOTIFICATION_PHYSICS_PROCESS" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:26 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:26 msgid "``_draw()`` : NOTIFICATION_DRAW" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:28 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:28 msgid "What users might *not* realize is that notifications exist for types other than Node alone:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:31 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:31 msgid ":ref:`Object::NOTIFICATION_POSTINITIALIZE `: a callback that triggers during object initialization. Not accessible to scripts." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:34 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:34 msgid ":ref:`Object::NOTIFICATION_PREDELETE `: a callback that triggers before the engine deletes an Object, i.e. a 'destructor'." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:38 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:38 msgid ":ref:`MainLoop::NOTIFICATION_WM_MOUSE_ENTER `: a callback that triggers when the mouse enters the window in the operating system that displays the game content." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:42 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:42 msgid "And many of the callbacks that *do* exist in Nodes don't have any dedicated methods, but are still quite useful." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:45 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:45 msgid ":ref:`Node::NOTIFICATION_PARENTED `: a callback that triggers anytime one adds a child node to another node." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:48 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:48 msgid ":ref:`Node::NOTIFICATION_UNPARENTED `: a callback that triggers anytime one removes a child node from another node." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:52 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:52 msgid ":ref:`Popup::NOTIFICATION_POST_POPUP `: a callback that triggers after a Popup node completes any ``popup*`` method. Note the difference from its ``about_to_show`` signal which triggers *before* its appearance." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:57 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:57 msgid "One can access all these custom notifications from the universal ``_notification`` method." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:61 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:61 msgid "Methods in the documentation labeled as \"virtual\" are also intended to be overridden by scripts." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:64 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:64 msgid "A classic example is the :ref:`_init ` method in Object. While it has no ``NOTIFICATION_*`` equivalent, the engine still calls the method. Most languages (except C#) rely on it as a constructor." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:69 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:69 msgid "So, in which situation should one use each of these notifications or virtual functions?" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:73 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:73 msgid "_process vs. _physics_process vs. \\*_input" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:75 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:75 msgid "Use ``_process`` when one needs a framerate-dependent deltatime between frames. If code that updates object data needs to update as often as possible, this is the right place. Recurring logic checks and data caching often execute here, but it comes down to the frequency at which one needs the evaluations to update. If they don't need to execute every frame, then implementing a Timer-yield-timeout loop is another option." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:93 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:93 msgid "Use ``_physics_process`` when one needs a framerate-independent deltatime between frames. If code needs consistent updates over time, regardless of how fast or slow time advances, this is the right place. Recurring kinematic and object transform operations should execute here." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:98 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:98 msgid "While it is possible, to achieve the best performance, one should avoid making input checks during these callbacks. ``_process`` and ``_physics_process`` will trigger at every opportunity (they do not \"rest\" by default). In contrast, ``*_input`` callbacks will trigger only on frames in which the engine has actually detected the input." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:104 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:104 msgid "One can check for input actions within the input callbacks just the same. If one wants to use delta time, one can fetch it from the related deltatime methods as needed." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:152 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:152 msgid "_init vs. initialization vs. export" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:154 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:154 msgid "If the script initializes its own node subtree, without a scene, that code should execute here. Other property or SceneTree-independent initializations should also run here. This triggers before ``_ready`` or ``_enter_tree``, but after a script creates and initializes its properties." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:159 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:159 msgid "Scripts have three types of property assignments that can occur during instantiation:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:206 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:206 msgid "When instantiating a scene, property values will set up according to the following sequence:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:209 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:209 msgid "**Initial value assignment:** instantiation will assign either the initialization value or the init assignment value. Init assignments take priority over initialization values." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:213 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:213 msgid "**Exported value assignment:** If instancing from a scene rather than a script, Godot will assign the exported value to replace the initial value defined in the script." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:217 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:217 msgid "As a result, instantiating a script versus a scene will affect both the initialization *and* the number of times the engine calls the setter." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:221 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:221 msgid "_ready vs. _enter_tree vs. NOTIFICATION_PARENTED" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:223 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:223 msgid "When instantiating a scene connected to the first executed scene, Godot will instantiate nodes down the tree (making ``_init`` calls) and build the tree going downwards from the root. This causes ``_enter_tree`` calls to cascade down the tree. Once the tree is complete, leaf nodes call ``_ready``. A node will call this method once all child nodes have finished calling theirs. This then causes a reverse cascade going up back to the tree's root." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:230 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:230 msgid "When instantiating a script or a standalone scene, nodes are not added to the SceneTree upon creation, so no ``_enter_tree`` callbacks trigger. Instead, only the ``_init`` call occurs. When the scene is added to the SceneTree, the ``_enter_tree`` and ``_ready`` calls occur." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/godot_notifications.rst:235 +#: ../../docs/tutorials/best_practices/godot_notifications.rst:235 msgid "If one needs to trigger behavior that occurs as nodes parent to another, regardless of whether it occurs as part of the main/active scene or not, one can use the :ref:`PARENTED ` notification. For example, here is a snippet that connects a node's method to a custom signal on the parent node without failing. Useful on data-centric nodes that one might create at runtime." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/index.pot b/sphinx/templates/tutorials/best_practices/index.pot similarity index 84% rename from sphinx/templates/getting_started/workflow/best_practices/index.pot rename to sphinx/templates/tutorials/best_practices/index.pot index 50937415e4..eb93538fec 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/index.pot +++ b/sphinx/templates/tutorials/best_practices/index.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,6 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/index.rst:2 +#: ../../docs/tutorials/best_practices/index.rst:2 msgid "Best practices" msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/introduction_best_practices.pot b/sphinx/templates/tutorials/best_practices/introduction_best_practices.pot similarity index 74% rename from sphinx/templates/getting_started/workflow/best_practices/introduction_best_practices.pot rename to sphinx/templates/tutorials/best_practices/introduction_best_practices.pot index dd20d43767..6fab647986 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/introduction_best_practices.pot +++ b/sphinx/templates/tutorials/best_practices/introduction_best_practices.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,30 +16,30 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/introduction_best_practices.rst:4 +#: ../../docs/tutorials/best_practices/introduction_best_practices.rst:4 msgid "Introduction" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/introduction_best_practices.rst:6 +#: ../../docs/tutorials/best_practices/introduction_best_practices.rst:6 msgid "This series is a collection of best practices to help you work efficiently with Godot." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/introduction_best_practices.rst:9 +#: ../../docs/tutorials/best_practices/introduction_best_practices.rst:9 msgid "Godot allows for a great amount of flexibility in how you structure a project's codebase and break it down into scenes. Each approach has its pros and cons, and they can be hard to weigh until you've worked with the engine for long enough." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/introduction_best_practices.rst:13 +#: ../../docs/tutorials/best_practices/introduction_best_practices.rst:13 msgid "There are always many ways to structure your code and solve specific programming problems. It would be impossible to cover them all here." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/introduction_best_practices.rst:16 +#: ../../docs/tutorials/best_practices/introduction_best_practices.rst:16 msgid "That is why each article starts from a real-world problem. We will break down each problem in fundamental questions, suggest solutions, analyze the pros and cons of each option, and highlight the best course of action for the problem at hand." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/introduction_best_practices.rst:20 +#: ../../docs/tutorials/best_practices/introduction_best_practices.rst:20 msgid "You should start by reading :ref:`doc_what_are_godot_classes`. It explains how Godot's nodes and scenes relate to classes and objects in other Object-Oriented programming languages. It will help you make sense of the rest of the series." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/introduction_best_practices.rst:26 +#: ../../docs/tutorials/best_practices/introduction_best_practices.rst:26 msgid "The best practices in Godot rely on Object-Oriented design principles. We use tools like the `single responsibility `_ principle and `encapsulation `_." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/logic_preferences.pot b/sphinx/templates/tutorials/best_practices/logic_preferences.pot similarity index 75% rename from sphinx/templates/getting_started/workflow/best_practices/logic_preferences.pot rename to sphinx/templates/tutorials/best_practices/logic_preferences.pot index 8e5b6d93f5..6e88c15596 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/logic_preferences.pot +++ b/sphinx/templates/tutorials/best_practices/logic_preferences.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,94 +16,94 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:4 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:4 msgid "Logic preferences" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:6 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:6 msgid "Ever wondered whether one should approach problem X with strategy Y or Z? This article covers a variety of topics related to these dilemmas." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:10 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:10 msgid "Loading vs. preloading" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:12 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:12 msgid "In GDScript, there exists the global :ref:`preload ` method. It loads resources as early as possible to front-load the \"loading\" operations and avoid loading resources while in the middle of performance-sensitive code." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:17 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:17 msgid "Its counterpart, the :ref:`load ` method, loads a resource only when it reaches the load statement. That is, it will load a resource in-place which can cause slowdowns when it occurs in the middle of sensitive processes. The ``load`` function is also an alias for :ref:`ResourceLoader.load(path) ` which is accessible to *all* scripting languages." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:24 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:24 msgid "So, when exactly does preloading occur versus loading, and when should one use either? Let's see an example:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:88 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:88 msgid "Preloading allows the script to handle all the loading the moment one loads the script. Preloading is useful, but there are also times when one doesn't wish for it. To distinguish these situations, there are a few things one can consider:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:93 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:93 msgid "If one cannot determine when the script might load, then preloading a resource, especially a scene or script, could result in further loads one does not expect. This could lead to unintentional, variable-length load times on top of the original script's load operations." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:98 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:98 msgid "If something else could replace the value (like a scene's exported initialization), then preloading the value has no meaning. This point isn't a significant factor if one intends to always create the script on its own." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:102 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:102 msgid "If one wishes only to 'import' another class resource (script or scene), then using a preloaded constant is often the best course of action. However, in exceptional cases, one may wish not to do this:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:106 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:106 msgid "If the 'imported' class is liable to change, then it should be a property instead, initialized either using an ``export`` or a ``load`` (and perhaps not even initialized until later)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:110 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:110 msgid "If the script requires a great many dependencies, and one does not wish to consume so much memory, then one may wish to, load and unload various dependencies at runtime as circumstances change. If one preloads resources into constants, then the only way to unload these resources would be to unload the entire script. If they are instead loaded properties, then one can set them to ``null`` and remove all references to the resource entirely (which, as a :ref:`Reference `-extending type, will cause the resources to delete themselves from memory)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:121 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:121 msgid "Large levels: static vs. dynamic" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:123 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:123 msgid "If one is creating a large level, which circumstances are most appropriate? Should they create the level as one static space? Or should they load the level in pieces and shift the world's content as needed?" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:127 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:127 msgid "Well, the simple answer is , \"when the performance requires it.\" The dilemma associated with the two options is one of the age-old programming choices: does one optimize memory over speed, or vice versa?" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:131 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:131 msgid "The naive answer is to use a static level that loads everything at once. But, depending on the project, this could consume a large amount of memory. Wasting users' RAM leads to programs running slow or outright crashing from everything else the computer tries to do at the same time." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:136 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:136 msgid "No matter what, one should break larger scenes into smaller ones (to aid in reusability of assets). Developers can then design a node that manages the creation/loading and deletion/unloading of resources and nodes in real-time. Games with large and varied environments or procedurally generated elements often implement these strategies to avoid wasting memory." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:142 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:142 msgid "On the flip side, coding a dynamic system is more complex, i.e. uses more programmed logic, which results in opportunities for errors and bugs. If one isn't careful, they can develop a system that bloats the technical debt of the application." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:147 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:147 msgid "As such, the best options would be..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:149 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:149 msgid "To use a static level for smaller games." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:151 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:151 msgid "If one has the time/resources on a medium/large game, create a library or plugin that can code the management of nodes and resources. If refined over time, so as to improve usability and stability, then it could evolve into a reliable tool across projects." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:156 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:156 msgid "Code the dynamic logic for a medium/large game because one has the coding skills, but not the time or resources to refine the code (game's gotta get done). Could potentially refactor later to outsource the code into a plugin." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/logic_preferences.rst:161 +#: ../../docs/tutorials/best_practices/logic_preferences.rst:161 msgid "For an example of the various ways one can swap scenes around at runtime, please see the :ref:`\"Change scenes manually\" ` documentation." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/node_alternatives.pot b/sphinx/templates/tutorials/best_practices/node_alternatives.pot similarity index 78% rename from sphinx/templates/getting_started/workflow/best_practices/node_alternatives.pot rename to sphinx/templates/tutorials/best_practices/node_alternatives.pot index 9ab2a19216..b68f923b10 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/node_alternatives.pot +++ b/sphinx/templates/tutorials/best_practices/node_alternatives.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,54 +16,54 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:4 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:4 msgid "When and how to avoid using nodes for everything" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:7 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:7 msgid "Nodes are cheap to produce, but even they have their limits. A project may have tens of thousands of nodes all doing things. The more complex their behavior though, the larger the strain each one adds to a project's performance." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:12 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:12 msgid "Godot provides more lightweight objects for creating APIs which nodes use. Be sure to keep these in mind as options when designing how you wish to build your project's features." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:16 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:16 msgid ":ref:`Object `: The ultimate lightweight object, the original Object must use manual memory management. With that said, it isn't too difficult to create one's own custom data structures, even node structures, that are also lighter than the :ref:`Node ` class." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:21 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:21 msgid "**Example:** See the :ref:`Tree ` node. It supports a high level of customization for a table of content with an arbitrary number of rows and columns. The data that it uses to generate its visualization though is actually a tree of :ref:`TreeItem ` Objects." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:26 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:26 msgid "**Advantages:** Simplifying one's API to smaller scoped objects helps improve its accessibility and improve iteration time. Rather than working with the entire Node library, one creates an abbreviated set of Objects from which a node can generate and manage the appropriate sub-nodes." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:31 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:31 msgid "One should be careful when handling them. One can store an Object into a variable, but these references can become invalid without warning. For example, if the object's creator decides to delete it out of nowhere, this would trigger an error state when one next accesses it." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:36 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:36 msgid ":ref:`Reference `: Only a little more complex than Object. They track references to themselves, only deleting loaded memory when no further references to themselves exist. These are useful in the majority of cases where one needs data in a custom class." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:41 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:41 msgid "**Example:** See the :ref:`File ` object. It functions just like a regular Object except that one need not delete it themselves." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:44 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:44 msgid "**Advantages:** same as the Object." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:46 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:46 msgid ":ref:`Resource `: Only slightly more complex than Reference. They have the innate ability to serialize/deserialize (i.e. save and load) their object properties to/from Godot resource files." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:50 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:50 msgid "**Example:** Scripts, PackedScene (for scene files), and other types like each of the :ref:`AudioEffect ` classes. Each of these can be save and loaded, therefore they extend from Resource." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/node_alternatives.rst:54 +#: ../../docs/tutorials/best_practices/node_alternatives.rst:54 msgid "**Advantages:** Much has :ref:`already been said ` on :ref:`Resource `'s advantages over traditional data storage methods. In the context of using Resources over Nodes though, their main advantage is in Inspector-compatibility. While nearly as lightweight as Object/Reference, they can still display and export properties in the Inspector. This allows them to fulfill a purpose much like sub-Nodes on the usability front, but also improve performance if one plans to have many such Resources/Nodes in their scenes." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/project_setup/project_organization.pot b/sphinx/templates/tutorials/best_practices/project_organization.pot similarity index 69% rename from sphinx/templates/getting_started/workflow/project_setup/project_organization.pot rename to sphinx/templates/tutorials/best_practices/project_organization.pot index 253a82e9c7..dfd8b70ef8 100644 --- a/sphinx/templates/getting_started/workflow/project_setup/project_organization.pot +++ b/sphinx/templates/tutorials/best_practices/project_organization.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,106 +16,106 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:4 +#: ../../docs/tutorials/best_practices/project_organization.rst:4 msgid "Project organization" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:7 +#: ../../docs/tutorials/best_practices/project_organization.rst:7 msgid "Introduction" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:9 +#: ../../docs/tutorials/best_practices/project_organization.rst:9 msgid "Since Godot has no restrictions on project structure or filesystem usage, organizing files when learning the engine can seem challenging. This tutorial suggests a workflow which should be a good starting point. We will also cover using version control with Godot." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:15 +#: ../../docs/tutorials/best_practices/project_organization.rst:15 msgid "Organization" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:17 +#: ../../docs/tutorials/best_practices/project_organization.rst:17 msgid "Godot is scene-based in nature, and uses the filesystem as-is, without metadata or an asset database." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:20 +#: ../../docs/tutorials/best_practices/project_organization.rst:20 msgid "Unlike other engines, many resources are contained within the scene itself, so the amount of files in the filesystem is considerably lower." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:23 +#: ../../docs/tutorials/best_practices/project_organization.rst:23 msgid "Considering that, the most common approach is to group assets as close to scenes as possible; when a project grows, it makes it more maintainable." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:27 +#: ../../docs/tutorials/best_practices/project_organization.rst:27 msgid "As an example, one can usually place into a single folder their basic assets, such as sprite images, 3D model meshes, materials, and music, etc. They can then use a separate folder to store built levels that use them." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:48 +#: ../../docs/tutorials/best_practices/project_organization.rst:48 msgid "Style guide" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:50 +#: ../../docs/tutorials/best_practices/project_organization.rst:50 msgid "For consistency across projects, we recommend following these guidelines:" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:52 +#: ../../docs/tutorials/best_practices/project_organization.rst:52 msgid "Use **snake_case** for folder and file names (with the exception of C# scripts). This sidesteps case sensitivity issues that can crop up after exporting a project on Windows. C# scripts are an exception to this rule, as the convention is to name them after the class name which should be in PascalCase." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:57 +#: ../../docs/tutorials/best_practices/project_organization.rst:57 msgid "Use **PascalCase** for node names, as this matches built-in node casing." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:58 +#: ../../docs/tutorials/best_practices/project_organization.rst:58 msgid "In general, keep third-party resources in a top-level ``addons/`` folder, even if they aren't editor plugins. This makes it easier to track which files are third-party. There are some exceptions to this rule; for instance, if you use third-party game assets for a character, it makes more sense to include them within the same folder as the character scenes and scripts." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:65 +#: ../../docs/tutorials/best_practices/project_organization.rst:65 msgid "Importing" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:67 +#: ../../docs/tutorials/best_practices/project_organization.rst:67 msgid "Godot versions prior to 3.0 did the import process from files outside the project. While this can be useful in large projects, it resulted in an organization hassle for most developers." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:71 +#: ../../docs/tutorials/best_practices/project_organization.rst:71 msgid "Because of this, assets are now transparently imported from within the project folder." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:75 +#: ../../docs/tutorials/best_practices/project_organization.rst:75 msgid "Ignoring specific folders" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:77 +#: ../../docs/tutorials/best_practices/project_organization.rst:77 msgid "To prevent Godot from importing files contained in a specific folder, create an empty file called ``.gdignore`` in the folder (the leading ``.`` is required). This can be useful to speed up the initial project importing." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:83 +#: ../../docs/tutorials/best_practices/project_organization.rst:83 msgid "To create a file whose name starts with a dot on Windows, you can use a text editor such as Notepad++ or use the following command in a command prompt: ``type nul > .gdignore``" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:87 +#: ../../docs/tutorials/best_practices/project_organization.rst:87 msgid "Once the folder is ignored, resources in that folder can't be loaded anymore using the ``load()`` and ``preload()`` methods. Ignoring a folder will also automatically hide it from the FileSystem dock, which can be useful to reduce clutter." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:91 +#: ../../docs/tutorials/best_practices/project_organization.rst:91 msgid "Note that the ``.gdignore`` file's contents are ignored, which is why the file should be empty. It does not support patterns like ``.gitignore`` files do." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:97 +#: ../../docs/tutorials/best_practices/project_organization.rst:97 msgid "Case sensitivity" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:99 +#: ../../docs/tutorials/best_practices/project_organization.rst:99 msgid "Windows and recent macOS versions use case-insensitive filesystems by default, whereas Linux distributions use a case-sensitive filesystem by default. This can cause issues after exporting a project, since Godot's PCK virtual filesystem is case-sensitive. To avoid this, it's recommended to stick to ``snake_case`` naming for all files in the project (and lowercase characters in general)." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:108 +#: ../../docs/tutorials/best_practices/project_organization.rst:108 msgid "You can break this rule when style guides say otherwise (such as the C# style guide). Still, be consistent to avoid mistakes." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:111 +#: ../../docs/tutorials/best_practices/project_organization.rst:111 msgid "On Windows 10, to further avoid mistakes related to case sensitivity, you can also make the project folder case-sensitive. After enabling the Windows Subsystem for Linux feature, run the following command in a PowerShell window::" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/project_organization.rst:121 +#: ../../docs/tutorials/best_practices/project_organization.rst:121 msgid "If you haven't enabled the Windows Subsystem for Linux, you can enter the following line in a PowerShell window *running as Administrator* then reboot when asked::" msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/scene_organization.pot b/sphinx/templates/tutorials/best_practices/scene_organization.pot similarity index 70% rename from sphinx/templates/getting_started/workflow/best_practices/scene_organization.pot rename to sphinx/templates/tutorials/best_practices/scene_organization.pot index 05b4db91f6..91d46c5f8e 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/scene_organization.pot +++ b/sphinx/templates/tutorials/best_practices/scene_organization.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,287 +16,287 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:4 +#: ../../docs/tutorials/best_practices/scene_organization.rst:4 msgid "Scene organization" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:6 +#: ../../docs/tutorials/best_practices/scene_organization.rst:6 msgid "This article covers topics related to the effective organization of scene content. Which nodes should one use? Where should one place them? How should they interact?" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:11 +#: ../../docs/tutorials/best_practices/scene_organization.rst:11 msgid "How to build relationships effectively" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:13 +#: ../../docs/tutorials/best_practices/scene_organization.rst:13 msgid "When Godot users begin crafting their own scenes, they often run into the following problem:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:16 +#: ../../docs/tutorials/best_practices/scene_organization.rst:16 msgid "They create their first scene and fill it with content only to eventually end up saving branches of their scene into separate scenes as the nagging feeling that they should split things up starts to accumulate. However, they then notice that the hard references they were able to rely on before are no longer possible. Re-using the scene in multiple places creates issues because the node paths do not find their targets and signal connections established in the editor break." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:24 +#: ../../docs/tutorials/best_practices/scene_organization.rst:24 msgid "To fix these problems, one must instantiate the sub-scenes without them requiring details about their environment. One needs to be able to trust that the sub-scene will create itself without being picky about how one uses it." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:29 +#: ../../docs/tutorials/best_practices/scene_organization.rst:29 msgid "One of the biggest things to consider in OOP is maintaining focused, singular-purpose classes with `loose coupling `_ to other parts of the codebase. This keeps the size of objects small (for maintainability) and improves their reusability." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:35 +#: ../../docs/tutorials/best_practices/scene_organization.rst:35 msgid "These OOP best practices have *several* implications for best practices in scene structure and script usage." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:38 +#: ../../docs/tutorials/best_practices/scene_organization.rst:38 msgid "**If at all possible, one should design scenes to have no dependencies.** That is, one should create scenes that keep everything they need within themselves." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:42 +#: ../../docs/tutorials/best_practices/scene_organization.rst:42 msgid "If a scene must interact with an external context, experienced developers recommend the use of `Dependency Injection `_. This technique involves having a high-level API provide the dependencies of the low-level API. Why do this? Because classes which rely on their external environment can inadvertently trigger bugs and unexpected behavior." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:49 +#: ../../docs/tutorials/best_practices/scene_organization.rst:49 msgid "To do this, one must expose data and then rely on a parent context to initialize it:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:52 +#: ../../docs/tutorials/best_practices/scene_organization.rst:52 msgid "Connect to a signal. Extremely safe, but should be used only to \"respond\" to behavior, not start it. Note that signal names are usually past-tense verbs like \"entered\", \"skill_activated\", or \"item_collected\"." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:73 +#: ../../docs/tutorials/best_practices/scene_organization.rst:73 msgid "Call a method. Used to start behavior." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:92 +#: ../../docs/tutorials/best_practices/scene_organization.rst:92 msgid "Initialize a :ref:`FuncRef ` property. Safer than a method as ownership of the method is unnecessary. Used to start behavior." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:112 +#: ../../docs/tutorials/best_practices/scene_organization.rst:112 msgid "Initialize a Node or other Object reference." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:131 +#: ../../docs/tutorials/best_practices/scene_organization.rst:131 msgid "Initialize a NodePath." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:150 +#: ../../docs/tutorials/best_practices/scene_organization.rst:150 msgid "These options hide the points of access from the child node. This in turn keeps the child **loosely coupled** to its environment. One can re-use it in another context without any extra changes to its API." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:156 +#: ../../docs/tutorials/best_practices/scene_organization.rst:156 msgid "Although the examples above illustrate parent-child relationships, the same principles apply towards all object relations. Nodes which are siblings should only be aware of their hierarchies while an ancestor mediates their communications and references." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:203 +#: ../../docs/tutorials/best_practices/scene_organization.rst:203 msgid "The same principles also apply to non-Node objects that maintain dependencies on other objects. Whichever object actually owns the objects should manage the relationships between them." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:209 +#: ../../docs/tutorials/best_practices/scene_organization.rst:209 msgid "One should favor keeping data in-house (internal to a scene) though as placing a dependency on an external context, even a loosely coupled one, still means that the node will expect something in its environment to be true. The project's design philosophies should prevent this from happening. If not, the code's inherent liabilities will force developers to use documentation to keep track of object relations on a microscopic scale; this is otherwise known as development hell. Writing code that relies on external documentation for one to use it safely is error-prone by default." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:218 +#: ../../docs/tutorials/best_practices/scene_organization.rst:218 msgid "To avoid creating and maintaining such documentation, one converts the dependent node (\"child\" above) into a tool script that implements :ref:`_get_configuration_warning() `. Returning a non-empty string from it will make the Scene dock generate a warning icon with the string as a tooltip by the node. This is the same icon that appears for nodes such as the :ref:`Area2D ` node when it has no child :ref:`CollisionShape2D ` nodes defined. The editor then self-documents the scene through the script code. No content duplication via documentation is necessary." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:229 +#: ../../docs/tutorials/best_practices/scene_organization.rst:229 msgid "A GUI like this can better inform project users of critical information about a Node. Does it have external dependencies? Have those dependencies been satisfied? Other programmers, and especially designers and writers, will need clear instructions in the messages telling them what to do to configure it." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:234 +#: ../../docs/tutorials/best_practices/scene_organization.rst:234 msgid "So, why do all this complex switcharoo work? Well, because scenes operate best when they operate alone. If unable to work alone, then working with others anonymously (with minimal hard dependencies, i.e. loose coupling) is the next best thing. Inevitably, changes may need to be made to a class and if these changes cause it to interact with other scenes in unforeseen ways, then things will start to break down. The whole point of all this indirection is to avoid ending up in a situation where changing one class results in adversely effecting other classes." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:243 +#: ../../docs/tutorials/best_practices/scene_organization.rst:243 msgid "Scripts and scenes, as extensions of engine classes, should abide by *all* OOP principles. Examples include..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:246 +#: ../../docs/tutorials/best_practices/scene_organization.rst:246 msgid "`SOLID `_" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:247 +#: ../../docs/tutorials/best_practices/scene_organization.rst:247 msgid "`DRY `_" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:248 +#: ../../docs/tutorials/best_practices/scene_organization.rst:248 msgid "`KISS `_" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:249 +#: ../../docs/tutorials/best_practices/scene_organization.rst:249 msgid "`YAGNI `_" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:252 +#: ../../docs/tutorials/best_practices/scene_organization.rst:252 msgid "Choosing a node tree structure" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:254 +#: ../../docs/tutorials/best_practices/scene_organization.rst:254 msgid "So, a developer starts work on a game only to stop at the vast possibilities before them. They might know what they want to do, what systems they want to have, but *where* to put them all? Well, how one goes about making their game is always up to them. One can construct node trees in countless ways. But, for those who are unsure, this helpful guide can give them a sample of a decent structure to start with." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:261 +#: ../../docs/tutorials/best_practices/scene_organization.rst:261 msgid "A game should always have a sort of \"entry point\"; somewhere the developer can definitively track where things begin so that they can follow the logic as it continues elsewhere. This place also serves as a bird's eye view of all of the other data and logic in the program. For traditional applications, this would be the \"main\" function. In this case, it would be a Main node." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:267 -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:278 +#: ../../docs/tutorials/best_practices/scene_organization.rst:267 +#: ../../docs/tutorials/best_practices/scene_organization.rst:278 msgid "Node \"Main\" (main.gd)" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:269 +#: ../../docs/tutorials/best_practices/scene_organization.rst:269 msgid "The ``main.gd`` script would then serve as the primary controller of one's game." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:272 +#: ../../docs/tutorials/best_practices/scene_organization.rst:272 msgid "Then one has their actual in-game \"World\" (a 2D or 3D one). This can be a child of Main. In addition, one will need a primary GUI for their game that manages the various menus and widgets the project needs." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:277 +#: ../../docs/tutorials/best_practices/scene_organization.rst:277 msgid "Node2D/Spatial \"World\" (game_world.gd)" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:278 +#: ../../docs/tutorials/best_practices/scene_organization.rst:278 msgid "Control \"GUI\" (gui.gd)" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:280 +#: ../../docs/tutorials/best_practices/scene_organization.rst:280 msgid "When changing levels, one can then swap out the children of the \"World\" node. :ref:`Changing scenes manually ` gives users full control over how their game world transitions." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:284 +#: ../../docs/tutorials/best_practices/scene_organization.rst:284 msgid "The next step is to consider what gameplay systems one's project requires. If one has a system that..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:287 +#: ../../docs/tutorials/best_practices/scene_organization.rst:287 msgid "tracks all of its data internally" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:288 +#: ../../docs/tutorials/best_practices/scene_organization.rst:288 msgid "should be globally accessible" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:289 +#: ../../docs/tutorials/best_practices/scene_organization.rst:289 msgid "should exist in isolation" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:291 +#: ../../docs/tutorials/best_practices/scene_organization.rst:291 msgid "... then one should create an :ref:`autoload 'singleton' node `." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:295 +#: ../../docs/tutorials/best_practices/scene_organization.rst:295 msgid "For smaller games, a simpler alternative with less control would be to have a \"Game\" singleton that simply calls the :ref:`SceneTree.change_scene() ` method to swap out the main scene's content. This structure more or less keeps the \"World\" as the main game node." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:301 +#: ../../docs/tutorials/best_practices/scene_organization.rst:301 msgid "Any GUI would need to also be a singleton; be a transitory part of the \"World\"; or be manually added as a direct child of the root. Otherwise, the GUI nodes would also delete themselves during scene transitions." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:306 +#: ../../docs/tutorials/best_practices/scene_organization.rst:306 msgid "If one has systems that modify other systems' data, one should define those as their own scripts or scenes rather than autoloads. For more information on the reasons, please see the :ref:`Autoloads versus regular nodes ` documentation." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:312 +#: ../../docs/tutorials/best_practices/scene_organization.rst:312 msgid "Each subsystem within one's game should have its own section within the SceneTree. One should use parent-child relationships only in cases where nodes are effectively elements of their parents. Does removing the parent reasonably mean that one should also remove the children? If not, then it should have its own place in the hierarchy as a sibling or some other relation." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:320 +#: ../../docs/tutorials/best_practices/scene_organization.rst:320 msgid "In some cases, one needs these separated nodes to *also* position themselves relative to each other. One can use the :ref:`RemoteTransform ` / :ref:`RemoteTransform2D ` nodes for this purpose. They will allow a target node to conditionally inherit selected transform elements from the Remote\\* node. To assign the ``target`` :ref:`NodePath `, use one of the following:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:328 +#: ../../docs/tutorials/best_practices/scene_organization.rst:328 msgid "A reliable third party, likely a parent node, to mediate the assignment." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:329 +#: ../../docs/tutorials/best_practices/scene_organization.rst:329 msgid "A group, to easily pull a reference to the desired node (assuming there will only ever be one of the targets)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:332 +#: ../../docs/tutorials/best_practices/scene_organization.rst:332 msgid "When should one do this? Well, this is subjective. The dilemma arises when one must micro-manage when a node must move around the SceneTree to preserve itself. For example..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:336 +#: ../../docs/tutorials/best_practices/scene_organization.rst:336 msgid "Add a \"player\" node to a \"room\"." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:337 +#: ../../docs/tutorials/best_practices/scene_organization.rst:337 msgid "Need to change rooms, so one must delete the current room." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:338 +#: ../../docs/tutorials/best_practices/scene_organization.rst:338 msgid "Before the room can be deleted, one must preserve and/or move the player." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:340 +#: ../../docs/tutorials/best_practices/scene_organization.rst:340 msgid "Is memory a concern?" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:342 +#: ../../docs/tutorials/best_practices/scene_organization.rst:342 msgid "If not, one can just create the two rooms, move the player and delete the old one. No problem." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:345 +#: ../../docs/tutorials/best_practices/scene_organization.rst:345 msgid "If so, one will need to..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:347 +#: ../../docs/tutorials/best_practices/scene_organization.rst:347 msgid "Move the player somewhere else in the tree." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:348 +#: ../../docs/tutorials/best_practices/scene_organization.rst:348 msgid "Delete the room." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:349 +#: ../../docs/tutorials/best_practices/scene_organization.rst:349 msgid "Instantiate and add the new room." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:350 +#: ../../docs/tutorials/best_practices/scene_organization.rst:350 msgid "Re-add the player." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:352 +#: ../../docs/tutorials/best_practices/scene_organization.rst:352 msgid "The issue is that the player here is a \"special case\"; one where the developers must *know* that they need to handle the player this way for the project. As such, the only way to reliably share this information as a team is to *document* it. Keeping implementation details in documentation however is dangerous. It's a maintenance burden, strains code readability, and bloats the intellectual content of a project unnecessarily." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:359 +#: ../../docs/tutorials/best_practices/scene_organization.rst:359 msgid "In a more complex game with larger assets, it can be a better idea to simply keep the player somewhere else in the SceneTree entirely. This results in:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:362 +#: ../../docs/tutorials/best_practices/scene_organization.rst:362 msgid "More consistency." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:363 +#: ../../docs/tutorials/best_practices/scene_organization.rst:363 msgid "No \"special cases\" that must be documented and maintained somewhere." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:364 +#: ../../docs/tutorials/best_practices/scene_organization.rst:364 msgid "No opportunity for errors to occur because these details are not accounted for." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:367 +#: ../../docs/tutorials/best_practices/scene_organization.rst:367 msgid "In contrast, if one ever needs to have a child node that does *not* inherit the transform of their parent, one has the following options:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:370 +#: ../../docs/tutorials/best_practices/scene_organization.rst:370 msgid "The **declarative** solution: place a :ref:`Node ` in between them. As nodes with no transform, Nodes will not pass along such information to their children." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:373 +#: ../../docs/tutorials/best_practices/scene_organization.rst:373 msgid "The **imperative** solution: Use the ``set_as_toplevel`` setter for the :ref:`CanvasItem ` or :ref:`Spatial ` node. This will make the node ignore its inherited transform." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:380 +#: ../../docs/tutorials/best_practices/scene_organization.rst:380 msgid "If building a networked game, keep in mind which nodes and gameplay systems are relevant to all players versus those just pertinent to the authoritative server. For example, users do not all need to have a copy of every players' \"PlayerController\" logic. Instead, they need only their own. As such, keeping these in a separate branch from the \"world\" can help simplify the management of game connections and the like." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:387 -msgid "The key to scene organization is to consider the SceneTree in relational terms rather than spatial terms. Are the nodes dependent on their parent's existance? If not, then they can thrive all by themselves somewhere else. If they are dependent, then it stands to reason that they should be children of that parent (and likely part of that parent's scene if they aren't already)." +#: ../../docs/tutorials/best_practices/scene_organization.rst:387 +msgid "The key to scene organization is to consider the SceneTree in relational terms rather than spatial terms. Are the nodes dependent on their parent's existence? If not, then they can thrive all by themselves somewhere else. If they are dependent, then it stands to reason that they should be children of that parent (and likely part of that parent's scene if they aren't already)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scene_organization.rst:393 +#: ../../docs/tutorials/best_practices/scene_organization.rst:393 msgid "Does this mean nodes themselves are components? Not at all. Godot's node trees form an aggregation relationship, not one of composition. But while one still has the flexibility to move nodes around, it is still best when such moves are unnecessary by default." msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/scenes_versus_scripts.pot b/sphinx/templates/tutorials/best_practices/scenes_versus_scripts.pot similarity index 61% rename from sphinx/templates/getting_started/workflow/best_practices/scenes_versus_scripts.pot rename to sphinx/templates/tutorials/best_practices/scenes_versus_scripts.pot index c40e7be70f..0c325b1376 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/scenes_versus_scripts.pot +++ b/sphinx/templates/tutorials/best_practices/scenes_versus_scripts.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,207 +16,207 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:4 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:4 msgid "When to use scenes versus scripts" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:6 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:6 msgid "We've already covered how scenes and scripts are different. Scripts define an engine class extension with imperative code, scenes with declarative code." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:10 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:10 msgid "Each system's capabilities are different as a result. Scenes can define how an extended class initializes, but not what its behavior actually is. Scenes are often used in conjunction with a script so that the scene acts as an extension of the scripts declarative code." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:16 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:16 msgid "Anonymous types" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:18 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:18 msgid "It *is* possible to completely define a scenes' contents using a script alone. This is, in essence, what the Godot Editor does, only in the C++ constructor of its objects." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:22 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:22 msgid "But, choosing which one to use can be a dilemma. Creating script instances is identical to creating in-engine classes whereas handling scenes requires a change in API:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:59 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:59 msgid "Also, scripts will operate a little slower than scenes due to the speed differences between engine and script code. The larger and more complex the node, the more reason there is to build it as a scene." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:64 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:64 msgid "Named types" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:66 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:66 msgid "In some cases, a user can register a script as a new type within the editor itself. This displays it as a new type in the node or resource creation dialog with an optional icon. In these cases, the user's ability to use the script is much more streamlined. Rather than having to..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:71 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:71 msgid "Know the base type of the script they would like to use." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:73 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:73 msgid "Create an instance of that base type." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:75 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:75 msgid "Add the script to the node." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:77 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:77 msgid "(Drag-n-drop method)" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:79 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:79 msgid "Find the script in the FileSystem dock." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:81 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:81 msgid "Drag and drop the script onto the node in the Scene dock." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:83 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:83 msgid "(Property method)" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:85 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:85 msgid "Scroll down to the bottom of the Inspector to find the ``script`` property and select it." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:87 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:87 msgid "Select \"Load\" from the dropdown." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:89 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:89 msgid "Select the script from the file dialog." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:91 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:91 msgid "With a registered script, the scripted type instead becomes a creation option like the other nodes and resources in the system. One need not do any of the above work. The creation dialog even has a search bar to look up the type by name." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:96 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:96 msgid "There are two systems for registering types..." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:98 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:98 msgid ":ref:`Custom Types `" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:100 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:100 msgid "Editor-only. Typenames are not accessible at runtime." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:102 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:102 msgid "Does not support inherited custom types." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:104 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:104 msgid "An initializer tool. Creates the node with the script. Nothing more." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:106 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:106 msgid "Editor has no type-awareness of the script or its relationship to other engine types or scripts." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:109 -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:127 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:109 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:127 msgid "Allows users to define an icon." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:111 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:111 msgid "Works for all scripting languages because it deals with Script resources in abstract." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:113 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:113 msgid "Set up using :ref:`EditorPlugin.add_custom_type `." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:115 -msgid ":ref:`Script Classes `" +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:115 +msgid ":ref:`Script Classes `" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:117 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:117 msgid "Editor and runtime accessible." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:119 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:119 msgid "Displays inheritance relationships in full." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:121 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:121 msgid "Creates the node with the script, but can also change types or extend the type from the editor." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:124 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:124 msgid "Editor is aware of inheritance relationships between scripts, script classes, and engine C++ classes." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:129 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:129 msgid "Engine developers must add support for languages manually (both name exposure and runtime accessibility)." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:132 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:132 msgid "Godot 3.1+ only." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:134 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:134 msgid "The Editor scans project folders and registers any exposed names for all scripting languages. Each scripting language must implement its own support for exposing this information." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:138 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:138 msgid "Both methodologies add names to the creation dialog, but script classes, in particular, also allow for users to access the typename without loading the script resource. Creating instances and accessing constants or static methods is viable from anywhere." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:143 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:143 msgid "With features like these, one may wish their type to be a script without a scene due to the ease of use it grants users. Those developing plugins or creating in-house tools for designers to use will find an easier time of things this way." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:148 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:148 msgid "On the downside, it also means having to use largely imperative programming." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:151 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:151 msgid "Performance of Script vs PackedScene" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:153 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:153 msgid "One last aspect to consider when choosing scenes and scripts is execution speed." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:155 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:155 msgid "As the size of objects increases, the scripts' necessary size to create and initialize them grows much larger. Creating node hierarchies demonstrates this. Each Node's logic could be several hundred lines of code in length." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:159 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:159 msgid "The code example below creates a new ``Node``, changes its name, assigns a script to it, sets its future parent as its owner so it gets saved to disk along with it, and finally adds it as a child of the ``Main`` node:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:195 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:195 msgid "Script code like this is much slower than engine-side C++ code. Each instruction makes a call to the scripting API which leads to many \"lookups\" on the back-end to find the logic to execute." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:199 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:199 msgid "Scenes help to avoid this performance issue. :ref:`PackedScene `, the base type that scenes inherit from, defines resources that use serialized data to create objects. The engine can process scenes in batches on the back-end and provide much better performance than scripts." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:205 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:205 msgid "Conclusion" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:207 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:207 msgid "In the end, the best approach is to consider the following:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:209 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:209 msgid "If one wishes to create a basic tool that is going to be re-used in several different projects and which people of all skill levels will likely use (including those who don't label themselves as \"programmers\"), then chances are that it should probably be a script, likely one with a custom name/icon." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:214 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:214 msgid "If one wishes to create a concept that is particular to their game, then it should always be a scene. Scenes are easier to track/edit and provide more security than scripts." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/scenes_versus_scripts.rst:218 +#: ../../docs/tutorials/best_practices/scenes_versus_scripts.rst:218 msgid "If one would like to give a name to a scene, then they can still sort of do this in 3.1 by declaring a script class and giving it a scene as a constant. The script becomes, in effect, a namespace:" msgstr "" diff --git a/sphinx/templates/getting_started/workflow/project_setup/version_control_systems.pot b/sphinx/templates/tutorials/best_practices/version_control_systems.pot similarity index 67% rename from sphinx/templates/getting_started/workflow/project_setup/version_control_systems.pot rename to sphinx/templates/tutorials/best_practices/version_control_systems.pot index f7d8f25662..07f148712c 100644 --- a/sphinx/templates/getting_started/workflow/project_setup/version_control_systems.pot +++ b/sphinx/templates/tutorials/best_practices/version_control_systems.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,54 +16,54 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:4 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:4 msgid "Version Control Systems" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:7 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:7 msgid "Introduction" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:9 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:9 msgid "Godot aims to be VCS friendly and generate mostly readable and mergeable files. Godot also supports the use of version control systems in the editor itself. However, VCS in the editor requires a plugin for the specific VCS you are using. VCS can be setup or shut down in the editor under **Project > Version Control**." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:17 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:17 msgid "Official Git plugin" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:19 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:19 msgid "Using Git from inside the editor is supported with an official plugin. You can find the latest releases `here `__. Documentation on how to use the Git plugin can be found `here `__." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:26 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:26 msgid "Files to exclude from VCS" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:28 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:28 msgid "There are some folders Godot creates you should have your VCS ignore:" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:30 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:30 msgid "``.import/``: This folder stores all the files it imports automatically based on your source assets and their import flags." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:32 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:32 msgid "``*.translation``: These files are binary imported translations generated from CSV files." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:33 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:33 msgid "``export_presets.cfg``: This file contains all the export presets for the project, including sensitive information such as Android keystore credentials." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:35 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:35 msgid "``.mono/``: This folder stores automatically-generated Mono files. It only exists in projects that use the Mono version of Godot." msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:39 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:39 msgid "Working with Git on Windows" msgstr "" -#: ../../docs/getting_started/workflow/project_setup/version_control_systems.rst:41 +#: ../../docs/tutorials/best_practices/version_control_systems.rst:41 msgid "Most Git for Windows clients are configured with the ``core.autocrlf`` set to ``true``. This can lead to files unnecessarily being marked as modified by Git due to their line endings being converted automatically. It is better to set this option as::" msgstr "" diff --git a/sphinx/templates/getting_started/workflow/best_practices/what_are_godot_classes.pot b/sphinx/templates/tutorials/best_practices/what_are_godot_classes.pot similarity index 63% rename from sphinx/templates/getting_started/workflow/best_practices/what_are_godot_classes.pot rename to sphinx/templates/tutorials/best_practices/what_are_godot_classes.pot index 460094bd29..3813370d8d 100644 --- a/sphinx/templates/getting_started/workflow/best_practices/what_are_godot_classes.pot +++ b/sphinx/templates/tutorials/best_practices/what_are_godot_classes.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,106 +16,106 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:4 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:4 msgid "Applying object-oriented principles in Godot" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:6 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:6 msgid "The engine offers two main ways to create reusable objects: scripts and scenes. Neither of these technically define classes under the hood." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:9 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:9 msgid "Still, many best practices using Godot involve applying object-oriented programming principles to the scripts and scenes that compose your game. That is why it's useful to understand how we can think of them as classes." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:13 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:13 msgid "This guide briefly explains how scripts and scenes work in the engine's core to help you understand how they work under the hood." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:17 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:17 msgid "How scripts work in the engine" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:19 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:19 msgid "The engine provides built-in classes like :ref:`Node `. You can extend those to create derived types using a script." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:22 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:22 msgid "These scripts are not technically classes. Instead, they are resources that tell the engine a sequence of initializations to perform on one of the engine's built-in classes." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:25 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:25 msgid "Godot's internal classes have methods that register a class's data with a :ref:`ClassDB `. This database provides runtime access to class information. ``ClassDB`` contains information about classes like:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:29 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:29 msgid "Properties." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:30 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:30 msgid "Methods." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:31 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:31 msgid "Constants." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:32 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:32 msgid "Signals." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:34 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:34 msgid "This ``ClassDB`` is what objects check against when performing an operation like accessing a property or calling a method. It checks the database's records and the object's base types' records to see if the object supports the operation." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:38 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:38 msgid "Attaching a :ref:`Script ` to your object extends the methods, properties, and signals available from the ``ClassDB``." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:43 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:43 msgid "Even scripts that don't use the ``extends`` keyword implicitly inherit from the engine's base :ref:`Reference ` class. As a result, you can instantiate scripts without the ``extends`` keyword from code. Since they extend ``Reference`` though, you cannot attach them to a :ref:`Node `." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:49 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:49 msgid "Scenes" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:51 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:51 msgid "The behavior of scenes has many similarities to classes, so it can make sense to think of a scene as a class. Scenes are reusable, instantiable, and inheritable groups of nodes. Creating a scene is similar to having a script that creates nodes and adds them as children using ``add_child()``." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:55 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:55 msgid "We often pair a scene with a scripted root node that makes use of the scene's nodes. As such, the scene is often an extension of the script's declarative code." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:58 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:58 msgid "The content of a scene helps to define:" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:60 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:60 msgid "What nodes are available to the script" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:61 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:61 msgid "How they are organized" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:62 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:62 msgid "How they are initialized" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:63 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:63 msgid "What signal connections they have with each other" msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:65 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:65 msgid "Why is any of this important to scene organization? Because instances of scenes *are* objects. As a result, many object-oriented principles that apply to written code also apply to scenes: single responsibility, encapsulation, and others." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:69 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:69 msgid "The scene is *always an extension of the script attached to its root node*, so you can interpret it as part of a class." msgstr "" -#: ../../docs/getting_started/workflow/best_practices/what_are_godot_classes.rst:72 +#: ../../docs/tutorials/best_practices/what_are_godot_classes.rst:72 msgid "Most of the techniques explained in this best practices series build on this point." msgstr "" diff --git a/sphinx/templates/tutorials/content/index.pot b/sphinx/templates/tutorials/content/index.pot deleted file mode 100644 index 7db5b893f1..0000000000 --- a/sphinx/templates/tutorials/content/index.pot +++ /dev/null @@ -1,21 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) 2014-2021, Juan Linietsky, Ariel Manzur and the Godot community (CC-BY 3.0) -# This file is distributed under the same license as the Godot Engine package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: Godot Engine 3.4\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: ../../docs/tutorials/content/index.rst:2 -msgid "Creating content" -msgstr "" diff --git a/sphinx/templates/getting_started/editor/command_line_tutorial.pot b/sphinx/templates/tutorials/editor/command_line_tutorial.pot similarity index 56% rename from sphinx/templates/getting_started/editor/command_line_tutorial.pot rename to sphinx/templates/tutorials/editor/command_line_tutorial.pot index ee7bc25d69..4e3f640ade 100644 --- a/sphinx/templates/getting_started/editor/command_line_tutorial.pot +++ b/sphinx/templates/tutorials/editor/command_line_tutorial.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Godot Engine 3.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-11-19 11:09+0100\n" +"POT-Creation-Date: 2021-12-16 15:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,558 +16,558 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:4 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:4 msgid "Command line tutorial" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:8 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:8 msgid "Some developers like using the command line extensively. Godot is designed to be friendly to them, so here are the steps for working entirely from the command line. Given the engine relies on almost no external libraries, initialization times are pretty fast, making it suitable for this workflow." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:16 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:16 msgid "On Windows and Linux, you can run a Godot binary in a terminal by specifying its relative or absolute path." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:19 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:19 msgid "On macOS, the process is different due to Godot being contained within an ``.app`` bundle (which is a *folder*, not a file). To run a Godot binary from a terminal on macOS, you have to ``cd`` to the folder where the Godot application bundle is located, then run ``Godot.app/Contents/MacOS/Godot`` followed by any command line arguments. If you've renamed the application bundle from ``Godot`` to another name, make sure to edit this command line accordingly." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:28 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:28 msgid "Command line reference" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:30 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:30 msgid "**General options**" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:33 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:47 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:75 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:103 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:133 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:33 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:47 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:75 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:103 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:133 msgid "Command" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:33 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:47 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:75 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:103 -#: ../../docs/getting_started/editor/command_line_tutorial.rst:133 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:33 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:47 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:75 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:103 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:133 msgid "Description" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:35 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:35 msgid "``-h``, ``--help``, ``/?``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:35 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:35 msgid "Display the list of command line options." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:37 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:37 msgid "``--version``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:37 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:37 msgid "Display the version string." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:39 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:39 msgid "``-v``, ``--verbose``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:39 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:39 msgid "Use verbose stdout mode." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:41 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:41 msgid "``--quiet``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:41 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:41 msgid "Quiet mode, silences stdout messages. Errors are still displayed." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:44 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:44 msgid "**Run options**" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:49 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:49 msgid "``-e``, ``--editor``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:49 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:49 msgid "Start the editor instead of running the scene (:ref:`tools ` must be enabled)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:51 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:51 msgid "``-p``, ``--project-manager``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:51 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:51 msgid "Start the project manager, even if a project is auto-detected (:ref:`tools ` must be enabled)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:53 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:53 msgid "``-q``, ``--quit``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:53 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:53 msgid "Quit after the first iteration." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:55 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:55 msgid "``-l ``, ``--language ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:55 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:55 msgid "Use a specific locale ( being a two-letter code). See :ref:`doc_locales` for more details." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:57 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:57 msgid "``--path ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:57 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:57 msgid "Path to a project ( must contain a 'project.godot' file)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:59 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:59 msgid "``-u``, ``--upwards``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:59 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:59 msgid "Scan folders upwards for 'project.godot' file." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:61 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:61 msgid "``--main-pack ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:61 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:61 msgid "Path to a pack (.pck) file to load." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:63 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:63 msgid "``--render-thread ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:63 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:63 msgid "Render thread mode ('unsafe', 'safe', 'separate'). See :ref:`Thread Model ` for more details." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:65 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:65 msgid "``--remote-fs
``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:65 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:65 msgid "Remote filesystem (``[:]`` address)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:67 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:67 msgid "``--audio-driver ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:67 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:67 msgid "Audio driver. Use ``--help`` first to display the list of available drivers." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:69 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:69 msgid "``--video-driver ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:69 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:69 msgid "Video driver. Use ``--help`` first to display the list of available drivers." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:72 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:72 msgid "**Display options**" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:77 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:77 msgid "``-f``, ``--fullscreen``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:77 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:77 msgid "Request fullscreen mode." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:79 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:79 msgid "``-m``, ``--maximized``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:79 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:79 msgid "Request a maximized window." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:81 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:81 msgid "``-w``, ``--windowed``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:81 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:81 msgid "Request windowed mode." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:83 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:83 msgid "``-t``, ``--always-on-top``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:83 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:83 msgid "Request an always-on-top window." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:85 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:85 msgid "``--resolution x``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:85 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:85 msgid "Request window resolution." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:87 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:87 msgid "``--position ,``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:87 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:87 msgid "Request window position." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:89 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:89 msgid "``--low-dpi``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:89 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:89 msgid "Force low-DPI mode (macOS and Windows only)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:91 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:91 msgid "``--no-window``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:91 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:91 msgid "Run with invisible window. Useful together with ``--script``." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:94 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:94 msgid "**Debug options**" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:98 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:98 msgid "Debug options are only available in the editor and debug export templates (they require ``debug`` or ``release_debug`` build targets, see :ref:`doc_introduction_to_the_buildsystem_target` for more details)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:105 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:105 msgid "``-d``, ``--debug``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:105 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:105 msgid "Debug (local stdout debugger)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:107 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:107 msgid "``-b``, ``--breakpoints``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:107 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:107 msgid "Breakpoint list as source::line comma-separated pairs, no spaces (use %%20 instead)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:109 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:109 msgid "``--profiling``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:109 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:109 msgid "Enable profiling in the script debugger." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:111 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:111 msgid "``--remote-debug
``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:111 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:111 msgid "Remote debug (``:`` address)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:113 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:113 msgid "``--debug-collisions``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:113 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:113 msgid "Show collision shapes when running the scene." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:115 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:115 msgid "``--debug-navigation``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:115 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:115 msgid "Show navigation polygons when running the scene." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:117 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:117 msgid "``--frame-delay ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:117 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:117 msgid "Simulate high CPU load (delay each frame by milliseconds)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:119 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:119 msgid "``--time-scale ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:119 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:119 msgid "Force time scale (higher values are faster, 1.0 is normal speed)." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:121 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:121 msgid "``--disable-render-loop``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:121 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:121 msgid "Disable render loop so rendering only occurs when called explicitly from script." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:123 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:123 msgid "``--disable-crash-handler``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:123 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:123 msgid "Disable crash handler when supported by the platform code." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:125 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:125 msgid "``--fixed-fps ``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:125 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:125 msgid "Force a fixed number of frames per second. This setting disables real-time synchronization." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:127 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:127 msgid "``--print-fps``" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:127 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:127 msgid "Print the frames per second to the stdout." msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:130 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:130 msgid "**Standalone tools**" msgstr "" -#: ../../docs/getting_started/editor/command_line_tutorial.rst:135 +#: ../../docs/tutorials/editor/command_line_tutorial.rst:135 msgid "``-s